Контроллер родительского вида не вращается, пока представлен дочерний контроллер - PullRequest
4 голосов
/ 26 февраля 2012

У меня есть родительский контроллер вида, который поддерживает все четыре ориентации. Он представляет дочерний контроллер представления, и если устройство поворачивается, пока представлен дочерний контроллер представления, а затем вы отклоняете дочерний контроллер, родительский контроллер представления поворачивается неправильно. Вот код, который я использую для вращения в родительском контроллере представления:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {

    newestIssueCoverImageButton.frame = CGRectMake(40, 20, 688, 865);
    shadow.frame = CGRectMake(40, 20, 688, 865);
    recordView.frame = CGRectMake(0, 44, 768, 916);
    classifiedsWebView.frame = CGRectMake(0, 44, 768, 916);

} else {

    newestIssueCoverImageButton.frame = CGRectMake(269, 20, 486, 613);
    shadow.frame = CGRectMake(269, 20, 486, 613);
    recordView.frame = CGRectMake(0, 44, 1024, 660);
    classifiedsWebView.frame = CGRectMake(0, 44, 1024, 660);

}

Родитель смотрит, хотя этот код не использовался, и я просто повернул устройство. Как мне вызвать этот код и убедиться, что родительский контроллер представления повернут правильно, когда пользователь в данный момент смотрит на ребенка? Спасибо за вашу помощь.

Ответы [ 3 ]

9 голосов
/ 18 января 2013

Из документов Apple:

Если контроллер вида не виден при изменении ориентации, то методы поворота никогда не вызываются.Однако метод viewWillLayoutSubviews вызывается, когда представление становится видимым.Ваша реализация этого метода может вызвать метод statusBarOrientation для определения ориентации устройства.

Я добавил BOOL для отслеживания, когда он не является верхним viewController, затем:

- (void)viewWillLayoutSubviews {

    if (notTopController) {

        [self willRotateToInterfaceOrientation:[[UIApplication sharedApplication] statusBarOrientation] duration:0];
        [self willAnimateRotationToInterfaceOrientation:[[UIApplication sharedApplication] statusBarOrientation] duration:0];

       notTopController = NO;

}

Пока у меня хорошо работает.

2 голосов
/ 27 февраля 2012

shouldAutorotateToInterfaceOrientation, willRotateToInterfaceOrientation, RotateToInterfaceOrientation и вызывается только на текущем / видимом контроллере представления, а не на представлениях за ним в стеке.В вашем случае, когда ребенок виден, он вызывается для ребенка, но не для родителя.

Если при повороте дочернего контроллера представления (если вы используете NavigationController) произошло событие поворота, shouldAutorotateToInterfaceOrientation будет вызываться у родителя (но не will/didRotate).Если вы хотите убедиться в этом сами, добавьте во все эти методы несколько операторов NSLog().

Зная все это, вы можете быстро исправить ваш код изменения размера в shouldAutorotateToInterfaceOrientation.

0 голосов
/ 26 февраля 2012

Убедитесь, что оба родительские и дочерние контроллеры представления поддерживают вращение. shouldAutorotateToInterfaceOrientation:

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