gpt4 book ai didi

ios - 在 tabViewController setSelectedIndex 之后旋转不为 View 设置动画

转载 作者:可可西里 更新时间:2023-11-01 05:43:26 26 4
gpt4 key购买 nike

旋转动画发生在状态栏(有时钟和电池图标),但 View 本身只是改变大小,它不做翻页动画。在 gif(下图)中,我以慢动作截取了一些旋转动画。您可以看到时钟和电池图标旋转到 View 中,即使内容只是缩放。

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

这有点可重复 - 起初,旋转正确发生,但在我以编程方式更改选项卡 View Controller 索引后,它可以触发。触发后,在我重置应用程序之前, View 不会出现旋转动画。

我更改选项卡 View Controller 然后将其改回的代码:

[appDelegate.tabBarController setSelectedIndex:0];
...code to operate on the code at index 0...
[appDelegate.tabBarController setSelectedIndex:2];

要强调的是,当我第一次运行该应用程序时,它确实正确地设置了旋转动画。在模拟器和硬件中表现相同。 iOS9。 Xcode 7.1.1。

有人知道为什么 View Controller 的内容会在旋转期间停止动画吗?

编辑-


回答fragilecat的问题:

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

我已经实现了 shouldAutorotateToInterfaceOrientation 和 shouldAutorotate and supportedInterfaceOrientations。当 View Controller 加载时,supportedInterfaceOrientations 被调用一次。 shouldAutorotateToInterfaceOrientation 和 shouldAutorotate 显然从未被调用。

2) 我正在通过 viewWillTransitionToSize 接收大小更改消息 - 这是 ios9,因此没有任何旋转消息。 willTransitionToTraitCollection 显然从未被调用,尽管它被覆盖了。我正在为两者调用 super。

3) 我没有使用 viewWillLayoutSubviews() 或 viewDidLayoutSubviews()。我只是覆盖 viewDidLoad 和 viewWillAppear。这些不影响旋转。

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

我确实注意到,在使用单击“确定”到警报 View 后,我以编程方式更改了 tabBarViewController selectedViewController 之后,旋转起初有效,但随后失败(不旋转但只是缩放)。我还没有弄清楚为什么,但在那次事件之后它会重复出现。

错误的顺序:

  1. 工作正常,旋转正常。
  2. 用户点击“确定”进入警报 View
  3. 我以编程方式调用 [tabBarViewController setSelectedIndex:0]
  4. 我在索引 0 的 View Controller 上调用了一些函数。
  5. 我以编程方式调用 [tabBarViewController setSelectedIndex:2](回到原来的状态)
  6. 现在不能可靠地进行轮换

最佳答案

有人知道为什么 View Controller 的内容会在旋转期间停止动画吗?

  1. subview Controller 的旋转方法配置不正确。
  2. 您的 subview Controller 没有收到旋转消息。
  3. 您在 View Controller 的布局方法中有自定义代码。
  4. 您的代码正在动态改变旋转/布局/动画方法。

我正在寻找关于哪种错误会产生此类错误的方向。

在没有看到您的代码的情况下很难回答这个问题,但以下是我在解决此问题时会采取的步骤。

  1. 确认您的 subview Controller 已正确设置旋转。

UIViewController Rotation Methods

  1. 确认您的 subview Controller 正在接收以下消息,以便您可以排除此问题,因为这是 iOS 9 中处理旋转的方式。

    func willTransitionToTraitCollection(_ newCollection: UITraitCollection, withTransitionCoordinator 协调器:UIViewControllerTransitionCoordinator)

    func viewWillTransitionToSize(_ size: CGSize,withTransitionCoordinator 协调器:UIViewControllerTransitionCoordinator)

如果您在其他地方重写这些方法,您应该确保调用 super 的版本,请参阅 UIContentContainer了解详情。

  1. 注释掉您可能viewWillLayoutSubviews() 中的任何自定义代码你的 View Controller 的实现。您也可以在 viewWillLayoutSubviews() 之间检查您的相框和 viewDidLayoutSubviews() .

编辑

您需要在主线程上执行选项卡更改。如果我是正确的,你正在使用 UIAlertView 的委托(delegate)?我认为您在主线程上没有做出您的决定!

        dispatch_async(dispatch_get_main_queue(), ^{
[appDelegate.tabBarController setSelectedIndex:0];
});

关于ios - 在 tabViewController setSelectedIndex 之后旋转不为 View 设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34053112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com