willRotateTo 界面方向在通用主从应用程序中不起作用

Posted

技术标签:

【中文标题】willRotateTo 界面方向在通用主从应用程序中不起作用【英文标题】:willRotateToInterfaceOrientation not working in Universal MasterDetail app 【发布时间】:2012-09-10 17:43:26 【问题描述】:

所以我有这个代码来更改我的 UIImage 视图上的图像。我在 iPad 和 iPhone 上都有一个非常奇怪的行为。

这段代码工作得很好,给了我想要的结果:

- (void)viewWillAppear:(BOOL)animated 
    if ([[UIApplication sharedApplication] statusBarOrientation] ==  UIInterfaceOrientationLandscapeRight||
        [[UIApplication sharedApplication] statusBarOrientation] ==  UIInterfaceOrientationLandscapeLeft) 
        self.backgroundView.image = [UIImage imageNamed:@"roadBackgroundLandscape.png"];
     
    if ([[UIApplication sharedApplication] statusBarOrientation] ==  UIInterfaceOrientationPortrait||
        [[UIApplication sharedApplication] statusBarOrientation] ==  UIInterfaceOrientationPortraitUpsideDown) 
        self.backgroundView.image = [UIImage imageNamed:@"roadBackgroundPortrait.png"];
    

但是放在另一个方法中的完全相同的代码并没有给我想要的结果!它只拍摄肖像照片并将其用于风景。至于纵向,它使用完全不同的图像!

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)
toInterfaceOrientation duration:
(NSTimeInterval)duration 

    if ([[UIApplication sharedApplication] statusBarOrientation] ==  UIInterfaceOrientationLandscapeRight||
        [[UIApplication sharedApplication] statusBarOrientation] ==  UIInterfaceOrientationLandscapeLeft) 
        self.backgroundView.image = [UIImage imageNamed:@"roadBackgroundLandscape.png"];
     
    else if ([[UIApplication sharedApplication] statusBarOrientation] ==  UIInterfaceOrientationPortrait||
        [[UIApplication sharedApplication] statusBarOrientation] ==  UIInterfaceOrientationPortraitUpsideDown) 
        self.backgroundView.image = [UIImage imageNamed:@"roadBackgroundPortrait.png"];
    

    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];

当我为self.backgroundView.image = [UIImage imageNamed:@"roadBackgroundPortrait.png"]; 行设置断点时,如果方向是landscape,它会触发即使

我在开发通用应用方面没有太多经验。我刚刚采用了 Apple 的 Master-Detail App Template 并对其进行了一些修改。这里有什么问题?提前致谢!

【问题讨论】:

【参考方案1】:

使用 toInterfaceOrientation 在 willRotateToInterfaceOrientation 方法中确定方向。当这个函数被调用时 statusBarOrientation 仍然是旧的。

供您参考 didRotateFromInterfaceOrientation 在设备旋转更改后调用。如果你在这里查询 statusBarOrientation 应该是正确的。

【讨论】:

以上是关于willRotateTo 界面方向在通用主从应用程序中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

ipad ios 5.1 中的界面方向问题

制作通用 iOS 应用程序应遵循的初始步骤

iPhone / iPad 通用应用程序方向

通用应用程序中启动图像的方向问题

iOS如何激活/停用某个尺寸类(方向)的布局约束?

是否有任何 WPF 控件可以处理在窗口中导航剪辑的菜单或用户界面?