2012-09-21 15 views
5

Ho un'app nell'app store con quasi 5 stelle, ma quando iOS 6 è uscito, alcune delle visualizzazioni nella gerarchia della vista principale dell'app hanno iniziato a lampeggiare. Questo accade nell'app che si trovava nel negozio (l'ho rimosso quando è uscito iOS6) e nel simulatore.iOS 6 view hierarchia incubo

Ho trascorso circa 14 ore, provando 100 cose, per eseguire il debug di questo in Xcode, ma non posso ottenere alcuna trazione su di esso. Le sottoview scompaiono e riappaiono come se un gremlin impostasse casualmente la proprietà visibile su ciascuna di esse fino a 10 volte al secondo, tra periodi più lunghi in cui tutto è normale.

L'interfaccia principale è un quadrante che l'utente può ruotare, dove io uso le trasformazioni 3d su un livello per ruotarlo. L'unico modello che ho trovato è che 3 delle 4 sottoview scompariranno insieme, come se fossero bloccate come una sola, quando il quadrante è ruotato in certe posizioni discrete.

La sottoview 4a scomparsa dovrebbe essere un'immagine statica e lampeggia e non lampeggia.

Mi piacerebbe qualche idea, consigli su come posso eseguire il debug di questo. Non è un avviso di memoria, e l'esecuzione di ulteriori [setNeedsToDisplay] sembra non avere alcun effetto. Sto iniziando a pensare che Apple abbia rotto qualcosa in iOS6, ma non riesco a trovare nessun altro a parlare di questi problemi.


Qui è una ripartizione di gerarchia di subviews e CALayers della vista principale:

  1. mio gerarchia contiene 2 CALayers di base che vanno bene.
  2. Sopra ci sono un UIView personalizzato molto grande (usa drawRect) e un UIImageVIew grande di tipo che lampeggiano insieme, sempre, quando il fondo viene ruotato in determinate posizioni. Solo quello inferiore è ruotato.
  3. Sopra questo è un disegno di testo personalizzato UIView che non lampeggia.
  4. Sopra questo è un UIImageView di un piccolo pin rosso grafico che lampeggia a la stessa ora esatta delle 2 viste precedenti. Questa è una vaniglia UIImageView; nessuna trasformazione o sottoclasse o codice di disegno personalizzato! E ha ancora lo stesso lampeggiare.
  5. Sopra questo è un UIButton invisibile che sembra funzionare sempre.
  6. Sopra che è un UIImageView che è un piccolo grafico che lampeggia fuori e costantemente, non correlato al lampeggio di rotazione a base dei altri 3 strati "legati" (dico linkato perché a loro piace a scomparire tutti insieme) .
+2

Forse si tenta di aggiungere alcuni messaggi di log sovrascrivendo i setter di 'isHidden', metodi' alpha' e strati cambiando l'ordine? Apple ha apportato alcune modifiche a UIKit, è vero, ma ciò non significa che tu non sia il responsabile del problema. Come avevano un avvertimento 'UITouch.h' dicendo' Le variabili di istanza di una classe UIKit dovrebbero essere considerati privati ​​... 'e indovinate un po ', i vars non sono pubbliche a iOS6 più. –

+0

Ho fatto quello che avete suggerito e le sostituzioni aggiunto per setHidden: e setAlpha: sul mio UIView sottoclasse che aveva problemi e impostare un punto di interruzione su ogni - non hanno mai stato colpito. Non sei sicuro di cosa intendi a proposito delle modifiche di UIKit. – avance

risposta

2

Provare manualmente a impostare i livelli di vista della proprietà z per assicurarsi che la gerarchia sia ciò di cui si ha bisogno.

+0

Strano - Io sono solo la creazione di strati vista una volta, nel metodo viewDidLoad del controller della vista, e iniziare corretta. Non sto impostando la z-postiion esplicitamente in seguito, o riorganizzare gli strati in qualsiasi altro modo, quindi non dovrebbe avere alcun effetto. Tuttavia, ho provato il tuo suggerimento con estremo scetticismo, e ha fatto il trucco! Grazie mille! – avance

3

(questo non è davvero una risposta, esso è una risposta alla risposta del topo, ma non ho i punti reputazione di commentare ancora)

Sì, impostando esplicitamente zPositions sembra risolvere il problema, e sì è strano. Ho anche incontrato questo problema e ne ho parlato qui: iOS 6 Rendering Bug: 3D-Rotation Causes Layers to Render Without Respect for View Hierarchy. Sembra essere un bug di rendering introdotto in iOS 6. Il blog ha un link alla versione Open Radar del bug che ho archiviato con Apple, oltre a un progetto di esempio che puoi eseguire per vedere il bug e la correzione zPosition.