- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if ([[UIDevice currentDevice] orientation] == UIInterfaceOrientationIsPortrait(interfaceOrientation))
{
[self isPortraitSplash];
}
else if ([[UIDevice currentDevice] orientation] == UIInterfaceOrientationIsLandscape(interfaceOrientation))
{
[self isLandScapeSplash];
}
return YES;
}
在我的方法isPortraitSplash
和isLandScapeSplash
中,我正在为视图设置框架。
当方向发生变化时,它始终会调用isLandScapeSplash
- 无法调用isPortraitSplash
方法。
任何人都可以告诉我为什么会这样吗?
答案 0 :(得分:2)
您现有的if
声明正在将BOOL
与UIDeviceOrientation
进行比较。您的测试需要:
- (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];
}
}
您必须为布局更改设置框架或任何其他框架,并使用如上所述。