gpt4 book ai didi

iphone - popViewControllerAnimated 上未调用 willAnimateRotationToInterfaceOrientation

转载 作者:行者123 更新时间:2023-12-03 18:27:49 25 4
gpt4 key购买 nike

在 MainViewController 中,我必须根据方向变化调整一些图像。简单 - 只需将代码添加到 willAnimateRotationToInterfaceOrientation: 回调

- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration {
NSLog(@"orientation: %@", name(orientation));
..

按预期工作。在纵向中,我将另一个方向感知的 UIViewController 推到 UINavigationController 上。我旋转到横向,一切都很好。

然后我通过调用返回到 MainViewController

[self.navigationController popViewControllerAnimated:YES];

虽然 MainViewController 的 subview 根据自动调整大小蒙版调整为横向,但 willAnimateRotationToInterfaceOrientation: 不会被调用!

我希望 willAnimateRotationToInterfaceOrientation: 在不在导航 Controller 堆栈顶部时也被调用,或者至少在返回到堆栈顶部时被调用。

我假设我可以在弹出之前手动调用 willAnimateRotationToInterfaceOrientation: 但感觉不对。

我错过了什么?

最佳答案

据我所知,这是预期的行为。如果 UIVC 不在堆栈顶部,则不应调用 willAnimateRotationToInterfaceOrientation,因为此时没有旋转动画。我现在正在开发的应用程序中处理此问题的方式与上面的海报类似。任何支持所有方向的 UIVC 都会有一个新方法

- (void) updateLayoutForNewOrientation: (UIInterfaceOrientation) 方向;

此方法从两个地方调用:


-(void) viewWillAppear: (BOOL) animated {
[super viewWillAppear: animated];
[self updateLayoutForNewOrientation: self.interfaceOrientation];
}<p></p>

<p>-(void) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation duration: (NSTimeInterval) duration {
[self updateLayoutForNewOrientation: interfaceOrientation];
}
</p>

新方法很简单:


- (void) updateLayoutForNewOrientation: (UIInterfaceOrientation) orientation {
if (UIInterfaceOrientationIsLandscape(orientation)) {
// Do some stuff
} else {
// Do some other stuff
}
}

此外,如果您担心代码在实际不需要时运行,您可以通过 viewDidDisappear 中设置的实例变量来跟踪新 UIVC 被推送到堆栈时设备所处的方向,并引用它来决定如果你想“做事”

关于iphone - popViewControllerAnimated 上未调用 willAnimateRotationToInterfaceOrientation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3595471/

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