我对iOS设备更改方向时某些视图如何旋转有一些疑问。
我正在开发一个应用程序,它基本上由2个视图控制器组成:第一个是嵌入在UINavigationController中的UITableViewController,第二个是在库存标准UIViewController上构建的完全自定义控件。
我注意到在我的UINavigationController视图中,当设备旋转时,UINavigationBar和UIToolbar在转换到其横向尺寸时都会执行交叉渐变动画。
由于技术原因,我没有为我的自定义视图控制器使用UINavigationController,但是我在相同的位置手动添加了UINavigationBar和UIToolbar(基本上是因为我需要将这些元素覆盖在顶部背景视图,因为它们可以选择隐藏,我希望直接控制这样做。)
但是,当我的自定义视图控制器可见时旋转设备时,这两个条不会执行交叉淡入淡出过渡。相反,所有的子视图都滑动(看起来有点混乱),并且背景图像在动画实际开始之前立即被交换到iPhone横向版本时扭曲(即,因此它开始平铺内部的32pt高艺术品44pt高UIToolbar)。
我只是想知道,当设备方向发生变化时,苹果实际上是如何为某些UIViews创建这种交叉渐变混合效果的?
答案 0 :(得分:2)
请勿使用原生自动旋转旋转视图。手动旋转它们。请看第二个答案: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
}];
请告诉我这是否适合您!
答案 1 :(得分:1)
我实际上回来重新探索了这一点。虽然UIView和CAAnimation转换方法确实有效,但它们在不同iOS设备上的相应帧速率变化如此之大,以至于我认为实现它们并不是最佳解决方案。
我终于咬紧牙关并联系了Apple Developer Relations并直接询问了他们(如果您不知道,每个Mac / iOS开发人员每年都可以免费向这些人询问2个问题!)。
他们迅速回复,并告诉我,几位Apple工程师实际上在2012年WWDC上就这个话题发表了演讲。
该演讲已被录制,并且可在iTunes上注册的Apple开发人员使用“Polishing Your Interface Rotations”标题。它涵盖了处理界面方向的许多不同方法,非常值得一看。 :)
希望这也有帮助!