在设备方向更改时交叉淡入某些 UIView

Posted

技术标签:

【中文标题】在设备方向更改时交叉淡入某些 UIView【英文标题】:Cross-fade certain UIViews on device orientation change 【发布时间】:2012-08-23 01:44:29 【问题描述】:

我有一点关于当 ios 设备改变方向时某些视图如何旋转的问题。

我现在正在开发一个应用程序,它基本上由 2 个视图控制器组成:第一个是嵌入在 UINavigationController 中的 UITableViewController,第二个是基于标准 UIViewController 构建的完全自定义的。

我注意到,在我的 UINavigationController 视图中,当设备旋转时,UINavigationBar 和 UIToolbar 在转换到其横向尺寸时都会执行交叉淡入淡出动画。

出于技术原因,我没有为我的自定义视图控制器使用 UINavigationController,但我在相同的位置手动添加了 UINavigationBar 和 UIToolbar(基本上是因为我需要这些元素能够覆盖在顶部的背景视图,因为它们可以选择隐藏,我希望直接控制来做到这一点)。

但是,当我在自定义视图控制器可见时旋转我的设备时,两个条不会执行交叉淡入淡出过渡。相反,所有的子视图都在滑动(看起来有点混乱),并且背景图像在动画实际开始之前立即切换到 iPhone 横向版本而扭曲(即,它开始将 32pt 高的艺术品平铺在一个44pt 高的 UIToolbar)。

我只是想知道,现在有没有人知道当设备方向改变时,Apple 是如何为某些 UIViews 创建这种交叉淡入淡出混合效果的?

【问题讨论】:

【参考方案1】:

不要使用原生自动旋转来旋转您的视图。手动旋转它们。在这里查看第二个答案:http://***.com/questions/1220580/iphone-dev-manually-rotate-view。本质上,您注册设备轮换通知并自己进行视图轮换。

如果你想交叉淡入淡出除了上面链接中指定的 UIView 动画块之外的两个视图,请转到:

[UIView transitionWithView:superViewOfButtonView duration:2.0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^
    [thebuttonViewIWantToCrossFade setFrame:newPositionRect];
completion:^(BOOL finished)
    //any completion code   
];

让我知道这是否适合你!

【讨论】:

哇哦!就是这样!我不知道有这么方便的 UIKit 调用。非常感谢!【参考方案2】:

我实际上回来并重新探索了这一点。虽然 UIView 和 CAAnimation 过渡方法确实有效,但它们各自在不同 iOS 设备上的帧速率差异很大,以至于我认为实现它们并不是最好的解决方案。

我终于硬着头皮联系了 Apple Developer Relations 直接问了他们(如果你不知道的话,每个 Mac/iOS 开发者每年可能会免费向这些家伙问 2 个问题!)。

他们迅速回复,并告诉我,实际上有几位 Apple 工程师在 WWDC 2012 上就该主题发表了演讲。

该演讲已被录制下来,可供注册的 Apple 开发人员在 iTunes 上以“抛光您的界面轮换”为标题。它涵盖了处理界面方向的许多不同方法,非常值得一看。 :)

希望这也有帮助!

【讨论】:

以上是关于在设备方向更改时交叉淡入某些 UIView的主要内容,如果未能解决你的问题,请参考以下文章

当设备方向更改 SWIFT 5 时重绘自定义 UIVIEW

在方向更改时更改 UIView

根据设备方向在 alloc/init 上设置正确的 UIView 帧大小

如何在 iOS 中随设备更改 [UIApplication sharedApplication].window 方向

UIView 旋转文本操作

使用 NAudio 交叉淡入淡出