2012-02-29 3 views
0

Я создал свой собственный контроллер для просмотра разделов для iPad. Моя главная цель в создании моего собственного - позволить пользователю открывать/закрывать левую боль по желанию. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти способ заставить диспетчеры представлений в моей правой боли оживить изменения. Я аниматирую представления в своем контроллере разделенного вида, но все остальные контроллеры суб-представлений в правой панели не оживляют их представления. Я не переключаю виды, поэтому я не могу использовать какие-либо из этих методов, и я не изменяю ориентации, поэтому эти методы недоступны (хотя, я все же пытался их попробовать, но это не сработало). Кто-нибудь знает, как это сделать?UIViewController Контейнерные субконтроллеры анимации

В настоящее время мой код, чтобы начать анимацию является:

- (void) setShowLeftPane:(BOOL)showLeftPane{ 
    if (_showLeftPane != showLeftPane){ 
     _showLeftPane = showLeftPane; 

     //Alert viewcontrollers and perform animation 
     if (showLeftPane) [_leftController viewWillAppear:YES]; 
     else [_leftController viewWillDisappear:YES]; 
     [UIView animateWithDuration:.25 animations:^{ 
      [self layoutViews]; 
      [_rightController viewWillLayoutSubviews]; 
     } completion:^(BOOL fin){ 
      [_rightController viewDidLayoutSubviews]; 
      if (_showLeftPane) [_leftController viewDidAppear:YES]; 
      else [_leftController viewDidDisappear:YES]; 
     }]; 

     //Switch out the appropriate pane button view 
     [_showLeftPane ? _openLeftPane : _closeLeftPane removeFromSuperview]; 
     [self.view addSubview:_showLeftPane ? _closeLeftPane : _openLeftPane]; 
    } 
} 

В настоящее время мой правый контроллера вида панели является UINavigationController, так что я имею дело с запасом классом. Я рассмотрел вопрос о добавлении метода категории viewWillAnimateSubviewLayoutWithDuration:(NSTimeInterval)interval в UINavigationController, который будет циклически проходить через его контроллеры представлений, которые тестируют/отправляют тот же самый метод в его контроллеры представления, чтобы они могли выполнять их анимацию, но это не совсем идеально, особенно если есть способ использовать акции методы.

Я рассматриваю возможность написать свой собственный навигационный контроллер, но это большая работа, которую я не хочу делать, если мне это не нужно.

ответ

0

Для тех, кто заботится, я в конечном итоге написал свой собственный контроллер контейнерных контейнеров. Это была большая работа, но она оказалась идеальной по нескольким причинам. Во-первых, создание пользовательского контроллера контейнера дало мне гораздо более глубокое представление о том, как работают контроллеры представлений, что было полезно. Во-вторых, это дало мне гораздо больший контроль над тем, как работает «контроллер навигации», что позволяет мне легко реализовать пользовательские переходы и настраиваемые методы pop/push, включая метод «replace» (pop, then push), который очень нужен в моем заявление.

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