加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – 在tabViewController setSelectedIndex之后,旋转不为视图

发布时间:2020-12-14 17:34:39 所属栏目:百科 来源:网络整理
导读:状态栏(具有时钟和电池图标)的旋转动画发生,但视图本身只是改变大小,它不执行页面翻转动画.在gif(下面)中,我做了几个慢动作旋转动画的屏幕截图.您可以看到时钟和电池图标旋转到视图中,即使内容只是缩放. http://imgur.com/gallery/Q3OXCIH 我发现了一些相似
状态栏(具有时钟和电池图标)的旋转动画发生,但视图本身只是改变大小,它不执行页面翻转动画.在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];
    });

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读