ViewController 方向变化没有动画
Posted
技术标签:
【中文标题】ViewController 方向变化没有动画【英文标题】:ViewController orientation change isn't animated 【发布时间】:2015-09-17 14:07:26 【问题描述】:当 iPhone 将其方向从纵向更改为横向时,我正在尝试调整一些视图,反之亦然。在 ios8 上一切正常,但不幸的是,这些变化不是动画的,而是在 iOS9 上立即发生的。这是我在模态UIViewController
中通过自定义转换呈现的代码:
override func shouldAutorotate() -> Bool
return true
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask
return UIInterfaceOrientationMask.AllButUpsideDown
override func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation
return .Portrait
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator)
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
let changeToPortrait = size.width < size.height
coordinator.animateAlongsideTransition( (context) -> Void in
//show portrait
if changeToPortrait
//do view changes...
//show landscape
else
//undo view changes...
) (context) -> Void in
print("done")
如果我打印coordinator.isAnimated()
,它会显示false
,因此coordinator.transitionDuration()
也是0.0
。
我必须做些什么来制作过渡变化的动画?
感谢您的帮助!
【问题讨论】:
【参考方案1】:此行为可能是因为您在 application:didFinishLaunchingWithOptions:
方法内将自定义 UIWindow
子类设置为 AppDelegate 的 window
属性,正如另一个答案中提到的端粒。
如果您需要在 iOS 9 中使用 UIWindow
子类,请为 AppDelegate 的 window
属性实现自定义 getter 以维护方向更改动画。
Apple 的 documentation 用于 UIApplicationDelegate
的 window 属性说:
"...你必须实现这个属性的getter方法并使用它 创建并返回您的自定义窗口。”
通常的做法是直接在application:didFinishLaunchingWithOptions:
中设置window属性。相反,在您的 AppDeleate 中,像这样实现自定义 getter(感谢 Tomas Camin 提供代码,找到 here):
Objective-C
- (MyCustomWindow *)window
static MyCustomWindow *customWindow = nil;
if (!customWindow) customWindow = [[MyCustomWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
return customWindow;
斯威夫特
var customWindow: MyCustomWindow?
var window: UIWindow?
get
customWindow = customWindow ?? MyCustomWindow(frame: UIScreen.mainScreen().bounds)
return customWindow
set
【讨论】:
甚至不需要与 UIWindow 子类。由于 GCKUICastContainerViewController,我手动创建了一个 UIWindow 实例并且遇到了这个问题。 Swift 解决方案对我有用。【参考方案2】:查看您的应用程序:didFinishLaunchingWithOptions: 处理程序。如果您手动创建应用程序的 UIWindow 对象,这似乎会触发 iOS9 旋转问题。
我不确定确切的原因,但在我们的应用程序中,我们能够通过删除操纵 UIWindow 的代码并让情节提要系统对其进行初始化来解决此问题。
【讨论】:
以上是关于ViewController 方向变化没有动画的主要内容,如果未能解决你的问题,请参考以下文章