iOS 横向和纵​​向委托混淆

Posted

技术标签:

【中文标题】iOS 横向和纵​​向委托混淆【英文标题】:iOS Landscape and Portrait Delegate Confusion 【发布时间】:2012-08-09 16:51:31 【问题描述】:

在大多数情况下,我已经很好地解决了问题。我似乎无法解决一个小问题。我会尽可能地概述这个问题,我不认为此时提出我的问题需要我发布任何代码,但请随时提出。

与大多数应用程序一样,我的应用程序默认为纵向视图。在主交互区域,当用户旋转设备时,我不必提供更改任何主要内容的代码,因为相反,我在视图堆栈顶部放置了一个新视图。这很有效,是用户在横向模式下与设备交互的两种方式之一。

第二个是模态显示的屏幕(来自这个主交互区域),它使用 UIWebView 从应用程序内播放 YouTube 视频,这同样运作良好。

当用户在横向模式下关闭模态视图控制器时,就会出现问题。发生的情况是用户返回主交互区域,内容调整为横向模式,而视图控制器通常为该主交互区域调用的委托方法没有被调用,我使用此委托方法使横向改变正常:

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

我会附上正在发生的事情的截图。

纵向模式下主要交互区域的截图。

横屏模式下主要交互区域的截图。

在横向模式下关闭模态视图控制器并返回主交互区域后主交互区域的屏幕截图(注意内容已居中并已切断顶部且未拉伸(不是我要求它这样做)

理想情况下,我想从横向模式返回主屏幕,让屏幕截图 2 成为用户看到的内容,而不是屏幕截图 3。

有什么建议吗?同样,我很高兴发布代码。提前致谢。

编辑

回答:

如此简单,我采用了将景观视图放置在视图堆栈顶部的代码,当它在它自己的方法中打开时。然后我在之前休息的委托方法和 ViewWillAppear 中调用该方法。

【问题讨论】:

【参考方案1】:

如果视图控制器控制屏幕上的***视图,系统只会将willRotateToInterfaceOrientation: 发送到视图控制器。由于您正在呈现模态视图控制器,因此模态视图控制器会获得willRotateToInterfaceOrientation:,而您的(隐藏)视图控制器不会。

当视图控制器的视图即将重新出现时,系统将viewWillAppear: 发送到视图控制器,因为模态视图控制器正在消失。所以你应该实现viewWillAppear:。在该方法中,检查界面是否为横向。如果是,请显示您的横向视图。否则,请隐藏您的横向视图。

【讨论】:

或者在调用willRotatejfjtdtdhtdhmgc时在模态视图控制器中做一个委托方法来旋转隐藏控制器 除非您知道视图即将出现,否则没有理由旋转隐藏控制器的视图。使用viewDidAppear: 或其他方法(如layoutSubviewsviewWillLayoutSubviews)执行此操作,系统在保证显示视图时会调用这些方法。 取出我在该委托方法中的内容,将其放入它自己的方法中,并在委托和 viewWillAppear 中调用该方法。解决方案很简单,谢谢:)

以上是关于iOS 横向和纵​​向委托混淆的主要内容,如果未能解决你的问题,请参考以下文章

Android 横向和纵​​向模式变体

HTML/CSS - 横向和纵​​向选项

如何在情节提要中为 iPad 横向和纵​​向模式将不同的框架设置为相同的视图?

UITableview/UIView 委托混淆

横向模式下的 Cocos 2d & CGPoint 混淆

IOS AutoLayout在横向和纵向之间切换时出现约束异常