gpt4 book ai didi

ios - 如何检测 View Controller 的方向

转载 作者:行者123 更新时间:2023-11-29 01:04:27 26 4
gpt4 key购买 nike

我有三个 View Controller ,它们都被推送到我已经子类化的导航 Controller 上,以便只允许在第二个 View Controller 中旋转,我这样做,

- (BOOL)shouldAutorotate
{
if ([self.topViewController isKindOfClass:[SecondViewController class]])
return YES;

return NO;
}

我在我的自定义导航 Controller 中编写了这段代码,问题是如果我以纵向模式打开我的应用程序,然后将方向更改为横向模式,我的 View Controller 不会旋转,但即使我的第二个 View Controller 打开它以纵向模式打开,但我希望它以横向模式打开,因为它支持旋转。

我怎样才能做到这一点?

最佳答案

您需要在导航期间使用attemptRotationToDeviceOrientation。您应该覆盖 push/pop 方法以调用 attemptRotationToDeviceOrientation 并有一个小的 UI 延迟 (dispatch_async)

@implementation CustomNavigationController

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[super pushViewController:viewController animated:animated];

[self updateOrientaion];
}

- (nullable UIViewController *)popViewControllerAnimated:(BOOL)animated
{
[self updateOrientaion];

return [super popViewControllerAnimated:animated];
}


- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
if ([self.topViewController isKindOfClass:[SecondViewController class]])
return UIInterfaceOrientationMaskAll;

return UIInterfaceOrientationMaskPortrait;
}


- (void)updateOrientaion
{
dispatch_async(dispatch_get_main_queue(), ^{
[UIViewController attemptRotationToDeviceOrientation];
});
}

@end

但是当您弹出到 UINavigationController 的 rootViewController 时,将为 rootViewController 调用 supportedInterfaceOrientations。所以你还需要为 FirstViewController 实现 supportedInterfaceOrientations

@implementation FirstViewController

.......

- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}

@end

关于ios - 如何检测 View Controller 的方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36572235/

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