iOS 8方向变化检测

Jos*_*ane 17 objective-c orientation ios8

在iOS 8上运行,我需要在旋转我的应用程序时更改UI.

目前我正在使用此代码:

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

    return YES;
}
Run Code Online (Sandbox Code Playgroud)

我这样做删除了当前的UI并添加了一个适合方向的新UI.但是,我的问题是,每次进行一次旋转时,此方法被调用大约4次.

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

Nic*_*ill 26

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

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

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

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

  • 由于在视图尚未转换为新大小时调用此方法,因此在视图转换为新大小后调用了哪种方法? (4认同)

Vin*_*ior 20

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

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

感谢代码的这个答案以及Nick在他的评论中链接到它.