仅在设备旋转时旋转某些 UI 元素

Posted

技术标签:

【中文标题】仅在设备旋转时旋转某些 UI 元素【英文标题】:Rotating certain UI elements only on device rotation 【发布时间】:2014-02-11 18:23:03 【问题描述】:

我有一个 UI,其中布局可以在任何方向上工作,但特定的 UI 元素需要旋转以匹配当前设备方向,并且状态栏应始终处于当前方向。为此,在我的视图控制器中,我有

- (BOOL)shouldAutorotate 
    return NO;

在我的设置中我这样做

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(interfaceChange:) name:UIDeviceOrientationDidChangeNotification object:nil];

在选择器中,我将界面更改和状态栏方向设置为新设备方向。这在我的应用程序中运行良好,但有一次确实导致控制中心出现布局问题。我只是想检查一下这是实现这一目标的最佳/正确方法吗?

【问题讨论】:

【参考方案1】:

1) 您可以通过以下链接创建 2 个视图层次结构并在 willRotateToInterfaceOrientation 中更改屏幕上的内容:Easiest way to support multiple orientations? How do I load a custom NIB when the application is in Landscape?

2) 或者您可以通过以下链接自行处理所有旋转:Rotating an image 90 degrees on same position when orientation changes。

【讨论】:

第一个并不真正适用,第二个是我描述的我已经做过的,我只是想验证这是最好的方法。我描述的方法改进了编号 2 中的链接,因为我从 shouldAutorotate 返回 NO,这比从 Apple 的文档中仅返回一个界面方向更有效: '如果您想暂时禁用自动旋转,请避免操作方向蒙版来执行此操作。相反,覆盖最顶层视图控制器上的 shouldAutorotate 方法。在执行任何自动旋转之前调用此方法。如果返回 NO,则旋转被抑制'

以上是关于仅在设备旋转时旋转某些 UI 元素的主要内容,如果未能解决你的问题,请参考以下文章

应用程序仅在 iOS 6 中旋转,在 iOS 5 中不旋转

仅在 LandscapeLeft 和 LandscapeRight 之间旋转

IOS11旋转设备时UIToolbar左右间距

基于设备旋转更新变量 - Swift UI

基于尺寸元素的设备旋转期间的动画更改将在旋转完成后进行

TableView 仅在屏幕旋转后更新