从视图控制器控制自动旋转,而无需修改应用程序的其余部分

Posted

技术标签:

【中文标题】从视图控制器控制自动旋转,而无需修改应用程序的其余部分【英文标题】:Control autorotation from a view controller without modifying the rest of the app 【发布时间】:2014-03-24 23:12:54 【问题描述】:

我正在开发一个 ios 框架。它包含一个视图控制器,可以由将使用我的框架的应用程序以模态方式显示。我无权访问应用程序代码,只有我的框架。我想在显示我的视图控制器时防止自动旋转。这可以做到吗?我尝试在我的 VC 中从 shouldAutorotateToInterfaceOrientation: 返回 NO,但没有被调用。

【问题讨论】:

如果您使用的是 iOS 6.0 或更高版本,则应该是 shouldAutorotate 函数,因为 shouldAutorotateToInterfaceOrientation: 已被弃用 【参考方案1】:

您可以将此代码添加到您的 AppDelegate。它将允许其他 viewController 响应自动旋转调用。

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
/* This is in order to allow views that do not support landscape mode to be able to load in
 */
return UIInterfaceOrientationMaskAll;

此外,在 iOS 6.0 及更高版本中,shouldAutorotateToInterfaceOrientation: 方法已被弃用。可以用以下方法代替:

- (NSUInteger)supportedInterfaceOrientations
    return UIInterfaceOrientationMaskPortrait;

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
    return UIInterfaceOrientationPortrait;

- (BOOL) shouldAutorotate
    return YES;

【讨论】:

问题是我无权访问应用程序的代码,包括应用程序委托。我在我的库中提供了一个应用程序使用的视图控制器。我需要在显示视图控制器时防止旋转。 我假设您知道谁可以访问 appDelegate,并要求他/她将该代码添加到其中。然后如上所述,您的正常自动旋转功能应该可以工作。除非该特定方法是 appDelegate,否则它将不起作用。我刚刚检查过了。

以上是关于从视图控制器控制自动旋转,而无需修改应用程序的其余部分的主要内容,如果未能解决你的问题,请参考以下文章

将数据从一个视图控制器传递到下一个视图控制器,而无需在 swift 中进行 segue

防止一个视图控制器自动旋转?

限制某些视图的自动旋转

UITabBarController 和模式视图的自动旋转问题

视图控制器和自动布局旋转问题

某些视图控制器独有的自动旋转