方向问题

时间:2012-10-10 05:37:47

标签: ios

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if ([[UIDevice currentDevice] orientation] == UIInterfaceOrientationIsPortrait(interfaceOrientation)) 
    {
        [self isPortraitSplash];
    }
    else if ([[UIDevice currentDevice] orientation] == UIInterfaceOrientationIsLandscape(interfaceOrientation))
    {
        [self isLandScapeSplash];
    }
    return  YES;
}  

在我的方法isPortraitSplashisLandScapeSplash中,我正在为视图设置框架。

当方向发生变化时,它始终会调用isLandScapeSplash - 无法调用isPortraitSplash方法。

任何人都可以告诉我为什么会这样吗?

3 个答案:

答案 0 :(得分:2)

您现有的if声明正在将BOOLUIDeviceOrientation进行比较。您的测试需要:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) 
    {
        [self isPotraitSplash];
    }
    else if (UIInterfaceOrientationIsLandscape(interfaceOrientation))
    {
        [self islandScapeSplash];
    }
    return  YES;
}  

UIInterfaceOrientationIsPortrait returns a BOOL,这就是if声明条件中的所有内容。

更新:我还要补充一点,我同意其他答案,最好在willRotateToInterfaceOrientation:duration:而不是shouldAutorotateToInterfaceOrientation:中完成这项工作。

但是,这不是原始代码失败的原因。由于if测试将UIDeviceOrientation与{{1}进行比较,原始代码失败了}}

答案 1 :(得分:2)

使用- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration代替shouldAutorotateToInterfaceOrientation,保证在轮换发生之前调用它。

不要删除shouldAutorotateToInterfaceOrientation,为每个要支持的方向返回YES。

答案 2 :(得分:1)

首先在

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

您必须声明要支持的所有方向。

并在

- (BOOL)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) 
    {
        [self isPotraitSplash];
    }
    else if (UIInterfaceOrientationIsLandscape(interfaceOrientation))
    {
        [self islandScapeSplash];
    }
}

您必须为布局更改设置框架或任何其他框架,并使用如上所述。