2

我在 ios 7 之前使用此代码阻止旋转(我也使用 xibs,现在是情节提要)

- (BOOL)shouldAutorotate {
  return NO;
}

- (NSUInteger)supportedInterfaceOrientations {
 return UIInterfaceOrientationPortrait;
}

现在我迁移到情节提要和 ios7 它无法正常工作,我的视图仍在旋转。

更新:我通过将此代码添加到委托解决了这个问题,现在我以前的代码就像魅力一样

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
 NSUInteger orientations = UIInterfaceOrientationMaskPortrait;
 if (self.fullScreenVideoIsPlaying) {
     return UIInterfaceOrientationMaskAllButUpsideDown;
 }
 else {        
     if(self.window.rootViewController){
         UIViewController *presentedViewController = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject];
         orientations = [presentedViewController supportedInterfaceOrientations];
 }


return orientations;
  }
4

4 回答 4

5

Atrik 的代码有效。这是一个更完整的解决方案,即使使用 UINavigationController 也允许锁定和解锁仅纵向模式

appdelegate .h


@property (nonatomic) BOOL screenIsPortraitOnly;


appdelegate .m

#pragma mark - View Orientation

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
    NSUInteger orientations = UIInterfaceOrientationMaskPortrait;
    if (self.screenIsPortraitOnly) {
        return UIInterfaceOrientationMaskPortrait;
    }
    else {
        if(self.window.rootViewController){
            UIViewController *presentedViewController = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject];
            orientations = [presentedViewController supportedInterfaceOrientations];
        }
        return orientations;
    }
}

对于我需要肖像锁的所有视图控制器如果您没有使用导入了应用程序委托的子类,那么不要忘记导入委托。对于大多数视图控制器,我使用 UIViewController 的一个子类,它至少可以进行导入。

#import "AppDelegate.h"

我将它用于所有纵向锁定的视图控制器。

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:true];
    [self portraitLock];
}

-(void) portraitLock {
    AppDelegate* appDelegate = [UIApplication sharedApplication].delegate;
    appDelegate.screenIsPortraitOnly = true;
}

#pragma mark - interface posiiton

- (NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    return UIInterfaceOrientationMaskPortrait;
}

- (BOOL) shouldAutorotate {
    return NO;
}

ViewDidLoad 在 vi​​ewDidAppear 之前运行,所以我在 UIViewController 的子类中运行它来解锁所有屏幕。带有 lock 方法的 viewWillAppear 仅用于我需要锁定屏幕的控制器。

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self portraitUnLock];
}

-(void) portraitUnLock {
    AppDelegate* appDelegate = [UIApplication sharedApplication].delegate;
    appDelegate.screenIsPortraitOnly = false;
}
于 2014-03-20T00:43:02.130 回答
3

如果您只想在横向模式下,那么您可以使用 xcode 项目设置转到目标 > 摘要 > 支持界面方向

在此处输入图像描述

或者你可以做一个代码

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations.
    return (UIInterfaceOrientationIsLandscape(interfaceOrientation));
}
于 2013-10-10T05:03:58.380 回答
2

在需要用于 iOS7 开发的 XCode 5 中,您可以转到您的目标并在部署信息下取消选中除纵向之外的所有设备方向。

仅限肖像

于 2013-10-09T16:28:06.587 回答
0

如果您根本不希望您的应用程序旋转(无论哪个视图处于活动状态),您可以在 Xcode 侧边栏中单击您的项目,向下滚动,然后取消选择 Landscape Left 和 Landscape Right。

于 2013-10-09T16:24:50.940 回答