gpt4 book ai didi

iOS:ViewDidAppear 上的方向检查旋转

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:25:21 26 4
gpt4 key购买 nike

背景:我想确保我的 viewControllers 在出现时正确旋转。我的 viewControllers 有很好的代码来管理可见时的旋转和方向。

问题:给定 NavigationController 中的两个 View Controller ,viewC1viewC2。我做了以下事情:

1.) 将 rootViewController 设置为 viewC1

2.) 将 viewC2 插入 NavigationController

3.) 旋转

4.) 弹出 viewC2

5.) viewC1 仍然停留在旧的方向外观(因为 willAnimateRotationToInterfaceOrientation 中的转换代码没有被调用)新的方向。

我该怎么做才能确保 viewC1 调用 willAnimateRotationToInterfaceOrientation 来重构自身以在新的旋转中正确地显示?

附加信息:这是所有代码(没有 Storyboard/xib)。我在所有 View 上都有 shouldAutorotateToInterfaceOrientation 返回 YES。我使用 willAnimateRotationToInterfaceOrientation 来管理我所有的旋转。

哦,请不要黑客。例如,从旋转中复制代码,然后手动检查旋转并在 viewDidAppear 中进行管理。

最佳答案

考虑方法的名称,以及您要实现的目标。

willAnimateRotationToInterfaceOrientation 指示由 View Controller 控制的 View 即将动画到特定方向。如果您的 View 位于导航堆栈的中间,则它不会显示在屏幕上。为不在屏幕上的东西制作动画是昂贵的,而且最终毫无值(value)。所以,那个特定的方法是不可能的,但仍然存在的问题是在 UIKit 中没有其他更合适的方法。原因是在屏幕外旋转某些东西(即使不是动画)是毫无值(value)的成本。开发人员有责任在 View 出现时处理方向的变化(如您所愿,“按需转换”)。

您说您不想要 hack,但您描述为 hack 的方法可能是最合适的做法。有一个名为类似的通用方法-(void) updateLayoutForOrientation:(UIInterfaceOrientation)orientation 动画:(BOOL)animated { ... }这不是一个坏主意。这可以是整个 View Controller 的方向更改转换的处理程序。

您可能需要检查/处理方向问题的地方是

-(void)viewWillAppear:(BOOL)animated

-(void) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation duration: (NSTimeInterval) duration

在这两个中,调用 updateLayoutForOrientation:animated: 为您完成工作。

关于iOS:ViewDidAppear 上的方向检查旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10837294/

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