Skip to content

点击旋转卡死或者旋转出现异常?

changsanjiang edited this page Dec 29, 2020 · 16 revisions

出现此种情况, 是因为未配置旋转, 请按照以下步骤进行配置:

配置旋转

  • step 1:

In your project, select TARGETS -> General -> Deployment Info -> Device Orientation -> select only Portrait

setup1

  • step 2:
@implementation AppDelegate
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    return UIInterfaceOrientationMaskAll;
}
@end

/// swift
/// class AppDelegate: UIResponder, UIApplicationDelegate {
///     func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> /// UIInterfaceOrientationMask {
///         return .all
///     }
/// }
  • step 3: 创建一个UIViewController+RotationControl的分类, 将以下内容复制到UIViewController+RotationControl.m中.
@implementation UIViewController (RotationControl)
- (BOOL)shouldAutorotate { 
    return NO;
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

@end


@implementation UITabBarController (RotationControl)
- (UIViewController *)sj_topViewController {
    if ( self.selectedIndex == NSNotFound )
        return self.viewControllers.firstObject;
    return self.selectedViewController;
}

- (BOOL)shouldAutorotate {
    return [[self sj_topViewController] shouldAutorotate];
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return [[self sj_topViewController] supportedInterfaceOrientations];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return [[self sj_topViewController] preferredInterfaceOrientationForPresentation];
}
@end

@implementation UINavigationController (RotationControl)
- (BOOL)shouldAutorotate {
    return self.topViewController.shouldAutorotate;
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return self.topViewController.supportedInterfaceOrientations;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return self.topViewController.preferredInterfaceOrientationForPresentation;
}

- (nullable UIViewController *)childViewControllerForStatusBarStyle {
    return self.topViewController;
}

- (nullable UIViewController *)childViewControllerForStatusBarHidden {
    return self.topViewController;
}
@end
  • setup 4: iOS 13.0 之后, 需在自己的 vc 中的shouldAutorotate方法中返回NO.
@interface YourViewController ()
@property (nonatomic, strong) SJVideoPlayer *player;
@end

@implementation YourViewController 
- (BOOL)shouldAutorotate { 
    return NO;
}
@end