2012-09-21 19 views
5

Tengo una aplicación en la tienda de aplicaciones con casi 5 estrellas, pero cuando salió iOS 6, algunas de las vistas en la jerarquía de vista principal de la aplicación comenzaron a parpadear. Esto sucede en la aplicación que estaba en la tienda (la eliminé cuando salió iOS6), así como en el simulador.iOS 6 ver jerarquía pesadilla

He pasado aproximadamente 14 horas, probando 100 cosas, para depurar esto en Xcode, pero no puedo obtener ninguna tracción sobre él. Las subvistas desaparecen y reaparecen como si hubiera un gremlin configurando aleatoriamente la propiedad visible para cada una de ellas hasta 10 veces por segundo, entre periodos más largos donde todo es normal.

La interfaz principal es una esfera que el usuario puede rotar, donde utilizo transformaciones 3d en una capa para girarla. El único patrón que he encontrado es que 3 de las 4 subvistas que desaparecen se desvanecen juntas, como si estuvieran bloqueadas como una sola, cuando se gira el dial a ciertas posiciones discretas.

La 4ta subvista desaparece debe ser una imagen estática y está parpadeando intermitentemente sin un patrón discernible.

Me encantaría cualquier idea, consejos sobre cómo puedo solucionar esto. No es una advertencia de memoria, y la ejecución de [setNeedsToDisplay] adicional parece no tener ningún efecto. Estoy empezando a pensar que Apple rompió algo en iOS6, pero no puedo encontrar a nadie más hablando de estos problemas.


Aquí es un desglose de jerarquía de subvistas y CALayers de la vista principal:

  1. Mi jerarquía contiene 2 CALayers base que son bien.
  2. Encima de eso hay un UIView personalizado muy grande (usa drawRect) y un UIImageVIew grande que parpadean juntos, siempre, cuando el inferior se gira en ciertas posiciones. Solo el inferior está siendo rotado .
  3. Encima de eso hay un dibujo de texto personalizado UIView que no parpadea.
  4. Encima de eso hay un pequeño pin rojo gráfico UIImageView que parpadea en al mismo tiempo que las 2 vistas anteriores. Este es un vainilla UIImageView; ¡sin transformaciones o subclase o código de dibujo personalizado! Y pero todavía tiene el mismo parpadeo.
  5. Por encima de eso es un UIButton invisible que parece funcionar todo el tiempo.
  6. Por encima de que es un UIImageView que es un pequeño gráfico que deje de parpadear y constantemente, sin relación con el parpadeo basado en la rotación de los otros capas 3 "vinculados" (digo vinculado porque les gusta a desaparecer todos juntos) .
+2

¿Intentó agregar algunos mensajes de registro al reemplazar a los programadores de 'isHidden',' alpha' y los métodos de capas al cambiar el orden? Apple hizo algunos cambios en UIKit, eso es cierto, pero aún no significa que usted no sea el responsable del problema. Como si tuvieran una advertencia en 'UITouch.h' diciendo' Las variables de instancia de cualquier clase de UIKit deben considerarse privadas ... 'y adivinen qué, los vars ya no son públicos en iOs6. –

+0

Hice lo que sugirió y agregué modificaciones para setHidden: y setAlpha: en mi subclase UIView que tenía problemas y establecí un punto de interrupción para cada uno: nunca recibieron un golpe. Sin embargo, no estoy seguro de lo que quiere decir con los cambios de UIKit. – avance

Respuesta

2

Intente configurar manualmente sus capas de vista z-property para asegurarse de que la jerarquía es lo que necesita.

+0

Extraño: solo estoy configurando las capas de vista una vez, en el método viewDidLoad del controlador de vista, y comienzan correctamente. No estableceré la explicidad z-postiion después, ni reorganizar capas de ninguna otra forma, por lo que no debería tener ningún efecto. Sin embargo, probé tu sugerencia con el máximo escepticismo, ¡y funcionó! ¡Muchas gracias! – avance

3

(Esto no es realmente una respuesta, que es una respuesta a la respuesta de la rata, pero no tengo los puntos de reputación para comentar aún)

Sí, establecer explícitamente zPositions parece solucionarlo, y sí es raro. También encontré este problema y escribí en el blog aquí: iOS 6 Rendering Bug: 3D-Rotation Causes Layers to Render Without Respect for View Hierarchy. Parece ser un error de renderizado introducido en iOS 6. El blog tiene un enlace a la versión Open Radar del error que archivé con Apple, así como un proyecto de muestra que puedes ejecutar para ver el error y la corrección zPosition.