2

当 iOS 设备改变方向时,我对某些视图如何旋转有一些疑问。

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

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

我的应用程序的主屏幕。 当设备旋转时,UINavigationController 元素交叉淡入淡出。

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

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

我只是想知道,当设备方向发生变化时,现在有没有人真正为某些 UIViews 创建这种交叉淡入淡出混合效果?

4

2 回答 2

3

不要使用本机自动旋转来旋转您的视图。手动旋转它们。在这里查看第二个答案:http://stackoverflow.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   
}];

让我知道这是否适合您!

于 2012-08-23T04:52:50.493 回答
1

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

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

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

演讲被录制下来,在 iTunes 上注册的 Apple 开发者可以在标题为“Polishing Your Interface Rotations”下观看。它涵盖了处理界面方向的许多不同方法,非常值得一看。:)

希望这也有帮助!

于 2013-01-16T14:03:43.297 回答