所以我有一个应用需要加载不同的图像作为背景图像,具体取决于设备的方向。我在viewDidLoad中有以下代码:
BOOL isLandScape = UIDeviceOrientationIsLandscape(self.interfaceOrientation);
if (isLandScape)
{
self.bgImage.image = [UIImage imageNamed:@"login_bg748.png"];
}
出于某种原因,即使模拟器在横向开始,这个bool仍然是假的。我检查了它,它总是报告处于纵向模式,无论实际的模拟器方向如何。有没有人知道为什么这不起作用?
在shouldAutoRotateForInterfaceOrientation中,我有以下内容:
if (UIDeviceOrientationIsLandscape(interfaceOrientation))
{
self.bgImage.image = [UIImage imageNamed:@"login_bg748.png"];
} else
{
self.bgImage.image = [UIImage imageNamed:@"login_bg1004.png"];
}
return YES;
这段代码确实有效,它只是搞砸的初创公司。在我执行一次旋转后,它可以正常工作。
答案 0 :(得分:7)
原因是viewDidLoad
太早了。每个应用程序都以纵向方式启动,然后旋转到横向。调用viewDidLoad
时,旋转尚未发生。您希望使用延迟性能,或将测试放在didRotateFromInterfaceOrientation
或类似的地方。请参阅我的书中的解释:
答案 1 :(得分:2)
首先在函数shouldAutoRotateForInterfaceOrientation
中,您只需要return YES
现在使用此功能
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation))
{
//landscape view login
}
else
{
//portrait View logic
}
}
如果您已经处于横向视图或纵向视图中,则可以使用viewDidLoad
功能
-(void)viewDidLoad
{
if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation))
{
//landscape view code
}
else
{
//portrait view code
}
}
希望这会有所帮助