2012-01-27 2 views
1

Мне сложно понять, почему Эрика Садун делает следующее (вызов viewDidAppear в viewDidLayoutSubviews) в примере ее кулинарной книги Ch07-11. Возможно, эти два метода должны вызывать другой метод?UIViewController viewDidLayoutSubviews

См: https://github.com/erica/iOS-5-Cookbook/tree/master/C07

- (void) viewDidAppear:(BOOL)animated 
{ 
    scrollView.frame = self.view.bounds; 
    scrollView.center = CGRectGetCenter(self.view.bounds); 

    if (imageView.image) 
    { 
     float scalex = scrollView.frame.size.width/imageView.image.size.width; 
     float scaley = scrollView.frame.size.height/imageView.image.size.height; 
     scrollView.zoomScale = MIN(scalex, scaley); 
     scrollView.minimumZoomScale = MIN(scalex, scaley); 
    } 
} 

- (void) viewDidLayoutSubviews 
{ 
    [self viewDidAppear:NO]; 
} 

Любая идея, почему?

+3

Я бы предположил, что это просто плохой факторинг кода. Она использует системный вызов UIViewControllers, чтобы viewDidAppear выполнял первоначальный макет, а затем лениво повторно использовал тот же метод непосредственно, когда представление было завершено, выкладывая subviews. Я думаю, вы правы в своем предположении, что viewDidAppear должен вызывать метод типа «adjustView», а viewDidLayoutSubviews должен делать то же самое. – RLB

+1

Я обнаружил, что могу поместить все материалы макета в viewDidLayoutSubviews, и ему не нужно быть в viewDidAppear, viewWillAppear или даже didRotateFromInterfaceOrientation. –

ответ

3

Это просто кажется неправильным для меня. Пусть UIKit обрабатывает вызовы этих методов.

ли это вместо:

 
- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; // Always call super with this!!! 

    [self doSomeCustomLayoutStuff]; // I don't actually think this is necessary. viewWillLayoutSubviews is meant for laying out subviews, and gets called automatically in iOS 5 and beyond. 

} 

- (void)viewWillLayoutSubviews { 
    [super viewWillLayoutSubviews]; 

    [self doSomeCustomLayoutStuff]; 
} 

- (void)doSomeCustomLayoutStuff { 
    scrollView.frame = self.view.bounds; 
    scrollView.center = CGRectGetCenter(self.view.bounds); 

    if (imageView.image) 
    { 
     float scalex = scrollView.frame.size.width/imageView.image.size.width; 
     float scaley = scrollView.frame.size.height/imageView.image.size.height; 
     scrollView.zoomScale = MIN(scalex, scaley); 
     scrollView.minimumZoomScale = MIN(scalex, scaley); 
    } 
} 
0

, потому что расположение srollView в viewDidLayoutSubviews изменится Scrollview который ты выставиться up.Then, прокрутка Scrollview должны получить немного заикается.

+0

Это не дает ответа на вопрос. Когда у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы сможете [комментировать] (http://stackoverflow.com/help/privileges/comment) в любой записи. Также проверьте это [что я могу сделать вместо этого] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can-i-do-instead). – thewaywewere

Смежные вопросы