UIViewController Контейнерная анимация субконтроллера - PullRequest
0 голосов
/ 29 февраля 2012

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

В настоящее время мой код для запуска анимации:

- (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, который будет циклически проходить тестирование контроллеров представления для / отправки того же метода в его контроллеры представления, чтобы они могли выполнять свои анимации, но это не совсем идеально, особенно если есть способиспользуйте стоковые методы.

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

1 Ответ

0 голосов
/ 24 мая 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...