如何只允许导航堆栈中的一个视图旋转?

发布于 2024-10-16 05:56:25 字数 162 浏览 4 评论 0原文

我的导航堆栈上有 ViewController A 和 B。 A 不支持横向,B 支持。如果用户在查看 B 时旋转到横向,然后点击“后退”按钮,则 A 现在处于横向状态。我该如何防止这种情况? A 的 shouldAutorotateToInterfaceOrientation 方法不被尊重是否有充分的理由?

I have ViewControllers A and B on the navigation stack. A does not support landscape orientation, B does. If the user rotates to landscape while viewing B and then taps the Back button, A is now in landscape. How do I prevent this? Is there a good reason the shouldAutorotateToInterfaceOrientation method of A is not respected?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夏九 2024-10-23 05:56:25

对于视图控制器来说,这确实是非常烦人的事情。而且似乎无法修复自动旋转。也许,最好的办法是从 B 的 shouldAutorotateToInterfaceOrientation 返回 NO,然后手动执行视图旋转。那么就不会影响A了。

This is really very annoying thing about view controllers. And It seems to be no fix for autorotation. Maybe, the best would be return NO from B's shouldAutorotateToInterfaceOrientation and then perform view rotation manually. Then it won't affect A.

巴黎夜雨 2024-10-23 05:56:25

是的,我也讨厌这样……
我发现解决这个问题的方法就是自己做:

- (void)myAutomaticRotation{
    if (A.view.frame.size.width > A.view.frame.size.height) {
        [UIView beginAnimations:@"View Flip" context:nil];
        [UIView setAnimationDuration: 0.5f];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(M_PI/2);
        self.view.bounds = CGRectMake(0.0f, 0.0f, 320.0f, 480.0f);
        A.view.frame = CGRectMake(0,0,320, 480);
        [UIView commitAnimations];
    }
}

当您导航到 A.view 时,您可以在主/超级 UIViewController 中调用 myAutomaticRotation,
在同一个地方,您应该使用:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

}

您可以在其中检查使用的视图(A,B)并仅允许 B 的横向模式...

卢卡

yes, i hate that too...
all i found to solve it was to do it by myself:

- (void)myAutomaticRotation{
    if (A.view.frame.size.width > A.view.frame.size.height) {
        [UIView beginAnimations:@"View Flip" context:nil];
        [UIView setAnimationDuration: 0.5f];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(M_PI/2);
        self.view.bounds = CGRectMake(0.0f, 0.0f, 320.0f, 480.0f);
        A.view.frame = CGRectMake(0,0,320, 480);
        [UIView commitAnimations];
    }
}

you can call myAutomaticRotation in a main/super UIViewController when you navigate to A.view,
and in that same place you should use:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

}

where you can check the view used (A,B) and allowing landscape mode just for B...

luca

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文