Cercando di abbattere un problema che ho avuto per un po 'oraCome determinare dimensioni UIView prima viewDidAppear della sua ViewController
Sfondo
Supponiamo cerco di calcolare un UIImage che dovrebbe adattarsi perfettamente una UIImageView, che è strutturata con vincoli nello storyboard.
Il contenuto di imageView non deve essere riempito/adattato ... ma si inserisce perfettamente nel telaio. Pertanto Ho un metodo nel mio viewController
- (UIImage *)calculatedImageForRect:(CGRect)imageRect
Problema
voglio fare in modo, che l'ImageView già contiene l'immagine corretta non appena la vista diventa visibile, quindi anche nel corso di una semplice spingere la transizione. Inoltre, non voglio generare UIImage più volte, poiché è relativamente costoso.
Questo diventa particolarmente interessante con dispositivi come l'iPhone6 plus, che hanno una risoluzione dello schermo diversa
ovviamente a viewDidLoad
i frame non sono impostati correttamente. A quel punto i fotogrammi sono impostati come nell'anteprima dello storyboard, ad es. setup per rappresentare la risoluzione IPhone5. Lo stesso è vero per viewWillAppear
. Qui il telaio sarebbe ad es. essere (10,10,300,100) < - chiamiamolo mal-frame
Sulla viewDidAppear
il telaio è corretta (10,10,394,100) = il corretto -frame < - larghezza invece di 320 punti, l'iPhone6Plus ha 414 punti. Tuttavia, qui è troppo tardi, poiché la vista è già visibile e l'impostazione dell'immagine risulterebbe in uno sfarfallio (immagine vuota> nuova immagine generata).
so il momento giusto per lavorare con la larghezza è la viewDidLayoutSubviews
, che viene dapprima chiamato con il errata telaio almeno una volta, quindi in un punto con il corretto -frame. Ma, come ho detto, non voglio generare l'immagine più volte, quindi ecco il dilemma:
Come posso determinare il destro del telaio prima che sia visibile?
Naturalmente potrei calcolare la giusta cornice dalla risoluzione [UIScreen mainScreen]
lavorando con le finali & vincoli di spicco del UIImageView, ma ci si sente sporca.
Quindi l'essenza della tua domanda è che vuoi capire come essere avvisato quando una particolare vista nella tua gerarchia di vista (in questo caso una UIImageView) viene finalmente impostata sulla sua cornice corretta, ma prima di renderla sullo schermo? – algal
Sì, questo è esattamente quello che voglio sapere – MarkHim