iOS 8方向变化检测

时间:2014-10-11 13:10:21

标签: objective-c ios8 orientation

在iOS 8上运行时,我需要在旋转我的应用时更改用户界面。

目前我正在使用此代码:

-(BOOL)shouldAutorotate
{
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    if (orientation != UIInterfaceOrientationUnknown) [self resetTabBar];

    return YES;
}

我这样做会删除当前的用户界面并添加适合该方向的新用户界面。但是,我的问题是,每次进行一次旋转时,此方法被调用大约4次。

在iOS 8中对方向更改进行更改的正确方法是什么?

2 个答案:

答案 0 :(得分:26)

Timur Kuchkarov是正确的,但我会在第一次检查此页时错过他的评论后发布答案。

检测方向更改(旋转)的 iOS 8 方法正在实现视图控制器的以下方法:

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
    // Do view manipulation here.
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}

注意:此时控制器的视图尚未转换到该大小,因此如果您的大小调整代码依赖于视图&#39,请务必小心; s当前尺寸。

答案 1 :(得分:20)

在视图转换为新大小之前,会立即调用viewWillTransitionToSize:withTransitionCoordinator:方法,正如Nick指出的那样。但是,在视图转换为新大小后立即运行代码的最佳方法是在方法中使用完成块:

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
    [coordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
        // your code here
    }];
}

感谢this answer代码和Nick在评论中链接到它。