状态栏(具有时钟和电池图标)会发生旋转动画,但视图本身只会改变大小,它不会执行页面翻转动画。在gif(下面)中,我做了几个慢动作旋转动画的屏幕截图。您可以看到时钟和电池图标旋转到视图中,即使内容只是缩放。
http://imgur.com/gallery/Q3OXCIH
我发现了一些相似但不完全相同的帖子: iOS Device Rotation Instant Snap rather than animation
iOS 9 Orientation Auto-Rotation Animation Not Working, But Always on Main Thread
这有点可重复 - 首先,旋转正确,但在我以编程方式更改选项卡视图控制器索引后,它可以触发。触发后,在重置应用程序之前,视图不会发生旋转动画。
代码,我更改选项卡视图控制器,然后将其更改回来:
[appDelegate.tabBarController setSelectedIndex:0];
...code to operate on the code at index 0...
[appDelegate.tabBarController setSelectedIndex:2];
要强调 - 首次运行应用程序时,它会正确设置旋转动画。在模拟器和硬件中表现相同。 IOS9。 Xcode 7.1.1。
任何人都知道为什么viewcontroller的内容会在轮换期间停止动画?
编辑 -
回答脆弱的问题:
中所述我已经实现了shouldAutorotateToInterfaceOrientation和shouldAutorotate和supportedInterfaceOrientations。当viewcontroller加载时,supportedInterfaceOrientations被调用一次。 shouldAutorotateToInterfaceOrientation和shouldAutorotate显然从未被调用过。
2)我通过viewWillTransitionToSize收到大小更改消息 - 这是ios9所以没有任何轮换消息。 willTransitionToTraitCollection显然从未被调用,但它被覆盖。我两个都打电话给超级。
3)我没有使用viewWillLayoutSubviews()或viewDidLayoutSubviews()。我只是重写viewDidLoad和viewWillAppear。这些不会影响旋转。
4)我没有动态改变旋转方法。
我注意到的是,旋转首先工作,但是然后失败(不旋转但只是缩放),在使用点击" ok"之后以编程方式更改tabBarViewController selectedViewController之后到一个提醒视图。我还没弄清楚为什么会这样,但是在那次活动之后它是重复的。
错误的顺序:
答案 0 :(得分:3)
任何人都知道为什么viewcontroller的内容会在轮播期间停止制作动画?
我正在寻找指出哪种错误可以产生此类错误。
这是看到你的代码时难以回答的问题,但以下是我在解决这个问题时会采取的步骤。
UIViewController Rotation Methods
确认您的子视图控制器正在接收以下消息,以便您可以排除此问题,因为这是在iOS 9中处理轮换的方式。
func willTransitionToTraitCollection(_ newCollection:UITraitCollection, withTransitionCoordinator协调员:UIViewControllerTransitionCoordinator)
func viewWillTransitionToSize(_ size:CGSize, withTransitionCoordinator协调员:UIViewControllerTransitionCoordinator)
如果您要覆盖其他应确保调用超级版本的方法,请参阅UIContentContainer了解详细信息。
viewWillLayoutSubviews()
视图控制器实现中的任何自定义代码。您也可以在viewWillLayoutSubviews()
和viewDidLayoutSubviews()
之间检查您的框架。您需要在主线程上执行选项卡更改。如果我是正确的你正在使用UIAlertView的代表?我不认为你在主线上打电话给你了!
dispatch_async(dispatch_get_main_queue(), ^{
[appDelegate.tabBarController setSelectedIndex:0];
});