Latest 1.0.4
Homepage https://github.com/kagenZhao/UIViewControllerRotate
License MIT
Platforms ios 8.0
Authors

UIViewControllerRotation

屏幕旋转控制类, 耦合性低, 但因为用到了runtime 所以有侵入性,

使用情景:

现在市面上大部分app 并不是所有页面都可以旋转屏幕, 一般只有些许几个页面需要旋转屏幕, 比如查看文档, 观看视频等界面.
这个扩展应运而生, 专门管理这个旋转状态, 默认界面都禁止旋转, 需要旋转的界面重写系统方法即可.

为什么用OC:

如果按照一般的写法需要以下步骤

  1. 就应该是创建BaseViewController, BaseNavigationController, BaseTabBarController 这三个基类,
  2. 修改其 shouldAutorotate, supportedInterfaceOrientations, preferredInterfaceOrientationForPresentation 方法来实现个别界面旋转效果

但是这样项目的耦合性就非常大, 需要所有类都进行继承, 所以想到用扩展的方法实现, 但是swift的extension 不支持重写父类方法, 所以这里用OC实现

添加方法:

  1. 往项目中拖入文件
  2. 用cocoapods引入, 在Podfile中添加
    pod 'UIViewControllerRotation'

使用方法

在需要旋转的界面重写下面方法即可 非常低耦合:

  • shouldAutorotate 默认返回 true
  • supportedInterfaceOrientations 默认返回 UIInterfaceOrientationMaskPortrait
  • preferredInterfaceOrientationForPresentation 默认返回 UIInterfaceOrientationPortrait
  • preferredStatusBarStyle 默认返回 UIStatusBarStyleDefault
  • prefersStatusBarHidden 默认返回 false

PS.如遇到某些类想要强制修改其方向, 需要用到 UIViewControllerRotationModel 进行设置

目前已经包含的内部类包括:

  1. AVFullScreenViewController
  2. AVPlayerViewController
  3. AVFullScreenViewController
  4. AVFullScreenPlaybackControlsViewController
  5. WebFullScreenVideoRootViewController

风险提示:

本扩展使用runtime替换了以下方法, 如果有冲突请自行修改或寻找其他解决方案:

  • UIViewController:
    • @selector(presentViewController:animated:completion:)
    • @selector(dismissViewControllerAnimated:completion:)
    • @selector(viewWillAppear:)
  • UINavigationController:
    • @selector(pushViewController:animated:)
    • @selector(popToViewController:animated:)
    • @selector(popToRootViewControllerAnimated:)
  • UITabBarController:
    • @selector(setSelectedIndex:)
    • @selector(setSelectedViewController:)
  • UIApplication:
    • @selector(setDelegate:)
  • UIApplication.delegate
    • @selector(application:supportedInterfaceOrientationsForWindow:)

Author

赵国庆, [email protected]

License

UIViewControllerRotation is available under the MIT license. See the LICENSE file for more info.

Latest podspec

{
    "name": "UIViewControllerRotate",
    "version": "1.0.4",
    "summary": "u975eu8026u5408u6027u7684u4f7fu754cu9762u652fu6301u65cbu8f6c",
    "description": "u5c4fu5e55u65cbu8f6cu63a7u5236u7c7b, u8026u5408u6027u4f4e, u4f46u56e0u4e3au7528u5230u4e86runtime u6240u4ee5u6709u4fb5u5165u6027,nu73b0u5728u5e02u9762u4e0au5927u90e8u5206app u5e76u4e0du662fu6240u6709u9875u9762u90fdu53efu4ee5u65cbu8f6cu5c4fu5e55, u4e00u822cu53eau6709u4e9bu8bb8u51e0u4e2au9875u9762u9700u8981u65cbu8f6cu5c4fu5e55, u6bd4u5982u67e5u770bu6587u6863, u89c2u770bu89c6u9891u7b49u754cu9762.nu8fd9u4e2au6269u5c55u5e94u8fd0u800cu751f, u4e13u95e8u7ba1u7406u8fd9u4e2au65cbu8f6cu72b6u6001, u9ed8u8ba4u754cu9762u90fdu7981u6b62u65cbu8f6c, u9700u8981u65cbu8f6cu7684u754cu9762u91cdu5199u7cfbu7edfu65b9u6cd5u5373u53ef.",
    "homepage": "https://github.com/kagenZhao/UIViewControllerRotate",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "authors": {
        "kagenZhao": "[email protected]"
    },
    "source": {
        "git": "https://github.com/kagenZhao/UIViewControllerRotate.git",
        "tag": "1.0.4"
    },
    "platforms": {
        "ios": "8.0"
    },
    "source_files": "UIViewControllerRotate/Classes/**/*",
    "public_header_files": "UIViewControllerRotate/Classes/**/*.h"
}

Pin It on Pinterest

Share This