Próbując przełamać problem, który miałem na chwilę sięJak określić rozmiar UIView przed viewDidAppear jego ViewController
Tło
Załóżmy, staram się obliczyć UIImage który powinien idealnie pasować do UIImageView, który jest ułożony z ograniczeniami w serii ujęć.
Zawartość obrazu nie powinna być wypełniona/dopasowana do kształtu obrazu, ale idealnie pasować do ramki. Dlatego mam metodę w moim viewController
- (UIImage *)calculatedImageForRect:(CGRect)imageRect
Problem
Chcę się upewnić, że ImageView zawiera już prawidłowy obraz tak szybko jak widok staje się widoczne, tak również w prosty push przejście. Ponadto nie chcę generować UIImage wiele razy, ponieważ jest stosunkowo droga.
Staje się to szczególnie interesujące z urządzeń takich jak iPhone6 Plus, które mają inną rozdzielczość ekranu
Oczywiście w viewDidLoad
ramki nie są ustawione poprawnie. W tym momencie ramki są ustawione tak, jak w podglądzie scenorysu - np. konfiguracja do reprezentowania rozdzielczości IPhone5. To samo dotyczy viewWillAppear
. Tutaj ramka będzie np. być (10,10,300,100) < - nazwijmy to źle ramy
Na viewDidAppear
rama jest prawidłowe (10,10,394,100) = z poprawne kadrów < - zamiast 320 punktów szerokości, iPhone6Plus ma 414 punktów. Niemniej jednak tutaj jest już za późno, ponieważ widok jest już widoczny, a ustawienie obrazu spowodowałoby migotanie (pusty obraz> nowy wygenerowany obraz).
wiem właściwy czas, aby pracować z szerokością jest viewDidLayoutSubviews
, który nazywany jest pierwszy z niewłaściwym ramki przynajmniej raz, a potem w pewnym momencie z właściwej ramki. Ale jak już mówiłem, nie chcę do generowania obrazu wiele razy, więc tu jest dylemat:
Jak mogę określić prawą ramkę zanim będzie widoczny?
Oczywiście mogę obliczyć właściwą ramkę z uchwałą [UIScreen mainScreen]
poprzez współpracę z tylnym & wiodących ograniczeń UIImageView, ale czuje się brudna.
Tak więc istotą pytania jest to, że chcesz dowiedzieć się, jak otrzymać powiadomienie, gdy określony widok w hierarchii widoku (w tym przypadku UIImageView) jest ostatecznie ustawiony na poprawną ramkę, ale przed renderowaniem na ekranie? – algal
Tak, to jest dokładnie to, co chcę wiedzieć. – MarkHim