gpt4 book ai didi

ios - 覆盖第 3 方 ViewController 的 Autorotation 属性

转载 作者:行者123 更新时间:2023-12-01 18:58:46 24 4
gpt4 key购买 nike

我正在开发一个应用程序,它使用提供自己的 View Controller 的第三方库。我可以使用的只有一个 .a 库和一个头文件。我的应用程序仅在纵向模式下运行,但是当我将手机设置为横向并从库中显示 View Controller 时,应用程序崩溃并显示以下错误:

“没有支持的方向与应用程序的方向匹配。”

我的猜测是他们编写了以下代码:

- (BOOL)shouldAutorotate { 
return YES;
}

- (NSUInteger)supportedInterfaceOrientations {

// ATTENTION! Only return orientation MASK values
// return UIInterfaceOrientationPortrait;

return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeLeft;
}

如果是这种情况,我可能需要重写这些方法来告诉操作系统不要旋转并且只支持纵向。 我该怎么做呢?

我能想到的唯一可能性是调整该 View Controller 的方法,但根据一些 SO 帖子,这似乎是一种危险的方法。

最佳答案

您始终可以执行以下操作(作为在纵向模式下锁定 ViewController 的示例):

1) 在您的应用程序委托(delegate)头文件中设置一个属性... @property (nonatomic) BOOL lockScreenPortraitOnly;
2)在应用程序委托(delegate)实现文件中添加以下方法:

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindows:(UIWindow *)window
{
if (!self.lockScreenPortraitOnly)
return UIInterfaceOrientationMaskAll; // or, whatever you wish to support
else
return UIInterfaceOrientationMaskPortrait;
}

3)从您的 ViewController 中添加以下内容:
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];

((EliotsApplicationDelegateType *)[UIApplication sharedApplication].delegate).lockScreenPortraitOnly = YES;
}

-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];

((EliotsApplicationDelegateType *)[UIApplication sharedApplication].delegate).lockScreenPortraitOnly = NO;
}

现在,Plist 中的内容或 3rd 方库在做什么并不重要,因为“窗口”是最根的,因此,它控制层次结构中的所有其他内容。显然,在我的示例中,假设您的 VC 在您的第 3 方库代码启动之前被调用(根据需要进行调整、季节和烘焙)。

希望这可以帮助。

关于ios - 覆盖第 3 方 ViewController 的 Autorotation 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24408483/

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