我正在开发一个使用第三方库的应用程序,该第三方库提供了自己的视图控制器。我可以使用的是.a库和头文件。我的应用程序仅在纵向模式下运行,但是当我将手机设置为横向并从库中显示视图控制器时,应用程序崩溃时出现错误,指出:
“没有支持的方向与应用程序的方向匹配。”
我的猜测是他们写了以下代码:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
// ATTENTION! Only return orientation MASK values
// return UIInterfaceOrientationPortrait;
return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeLeft;
}
如果是这种情况,我可能需要覆盖这些方法,告诉操作系统不要旋转,只支持肖像。 我该怎么做呢?
我能想到的唯一可能性是为该视图控制器调整方法,但根据一些SO帖子,这似乎是一种危险的方法。
答案 0 :(得分:2)
您始终可以执行以下操作(作为在纵向模式下锁定ViewController的示例):
1)在应用程序委托头文件中设置属性... @property (nonatomic) BOOL lockScreenPortraitOnly;
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在第三方库代码被调整之前被调用(根据需要调整,调整和烘焙)。
希望这有帮助。
答案 1 :(得分:1)
我说要继续并且调整它。升级库以测试此特定项目时,您需要小心。混合的危险通常伴随着混乱的Apple API,因为它们可以被弃用或者在任何版本中它们的行为都会发生变化(这可能随后会破坏用户的应用程序)。