1
- (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方法。

谁能告诉我为什么会这样?

4

3 回答 3

2

您现有的if陈述是将 aBOOL与 a进行比较UIDeviceOrientation。您的测试需要:

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

UIInterfaceOrientationIsPortrait 返回一个 BOOL,这就是您在if语句条件中所需要的。

更新:我还要补充一点,我同意其他答案,即最好在willRotateToInterfaceOrientation:duration:而不是shouldAutorotateToInterfaceOrientation:.

但是,这不是您的原始代码失败的原因。 原始代码失败是因为if测试UIDeviceOrientation比较BOOL.

于 2012-10-10T05:42:28.263 回答
2

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

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

于 2012-10-10T05:45:04.223 回答
1

首先在

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

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

并且在

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

您必须设置框架或任何其他布局更改,并像上面一样使用。

于 2012-10-10T05:44:00.510 回答