Ios 覆盖第三方ViewController的自动旋转属性
我正在开发一个应用程序,它利用第三方库来展示自己的视图控制器。我所能得到的只是一个.a库和一个头文件。我的应用程序仅在纵向模式下运行,但当我将手机置于横向模式并从库中显示视图控制器时,应用程序会崩溃,并出现一个错误,说明: “没有支持的方向与应用程序的方向匹配。” 我猜他们已经编写了以下代码:Ios 覆盖第三方ViewController的自动旋转属性,ios,objective-c,Ios,Objective C,我正在开发一个应用程序,它利用第三方库来展示自己的视图控制器。我所能得到的只是一个.a库和一个头文件。我的应用程序仅在纵向模式下运行,但当我将手机置于横向模式并从库中显示视图控制器时,应用程序会崩溃,并出现一个错误,说明: “没有支持的方向与应用程序的方向匹配。” 我猜他们已经编写了以下代码: - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { //
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
// ATTENTION! Only return orientation MASK values
// return UIInterfaceOrientationPortrait;
return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeLeft;
}
如果是这样的话,我可能需要重写这些方法来告诉操作系统不要旋转,并且只支持纵向我该怎么做呢?
我能想到的唯一可能性是快速切换视图控制器的方法,但根据一些SO帖子的说法,这似乎是一种危险的方法。我想说,继续,快速切换它。升级库以测试此特定项时,需要小心。swizzling的危险通常伴随着swizzling Apple的API而来,因为它们可能会被弃用,或者在任何版本中改变它们的行为(这可能会破坏你的应用程序以供用户使用) 始终可以执行以下操作(例如在纵向模式下锁定ViewController): 1) 在应用程序代理头文件上设置属性<代码>@仅限属性(非原子)布尔锁代码> 2) 在应用程序委托实现文件中添加以下方法:
-(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中有什么或第三方库在做什么并不重要,因为“窗口”是最根的,因此,它控制层次结构中的所有其他内容。显然,在我的示例中,假设在第三方库代码启动之前调用了VC(根据需要调整、季节和烘焙)
希望这对您有所帮助。可能的副本