微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – 在tabViewController setSelectedIndex之后,旋转不为视图设置动画

状态栏(具有时钟和电池图标)的旋转动画发生,但视图本身只是改变大小,它不执行页面翻转动画.在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的内容会在旋转期间停止动画?

编辑-

回答fragilecat的问题:

1)我被设置为使用旋转功能,如https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/occ/clm/UIViewController/attemptRotationToDeviceOrientation所述

我已经实现了shouldAutorotatetoInterfaceOrientation和shouldAutorotate和supportedInterfaceOrientations.当viewcontroller加载时,supportedInterfaceOrientations被调用一次. shouldAutorotatetoInterfaceOrientation和shouldAutorotate显然从未被调用过.

2)我通过viewWillTransitionToSize接收大小更改消息 – 这是ios9所以没有任何轮换消息. willTransitionToTraitCollection显然从未被调用,但它被覆盖.我两个都叫超级.

3)我没有使用viewWillLayoutSubviews()或viewDidLayoutSubviews().我只是重写viewDidLoad和viewWillAppear.这些不会影响旋转.

4)我没有动态改变旋转方法.

我注意到的是旋转首先工作,然后失败(不旋转但只是缩放),在用户点击“确定”后以编程方式更改tabBarViewController selectedViewController到alertview.我还没弄清楚为什么会这样,但在那次活动之后它是重复的.

错误的顺序:

>工作正常,旋转确定.
>用户点击“确定”到警报视图
>我以编程方式调用[tabBarViewController setSelectedindex:0]
>我在索引0的viewcontroller上调用了一些函数.
>我以编程方式调用[tabBarViewController setSelectedindex:2](回到原文)
>旋转现在不会可靠地发生

解决方法

任何人都知道为什么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];
    });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐