关于ipad支持横屏旋转

加速计是整个IOS屏幕旋转的基础,依赖加速计,设备才可以判断出当前的设备方向,IOS系统共定义了以下七种设备方向:

{
  typedef NS_ENUM(NSInteger, UIDeviceOrientation) {
    UIDeviceOrientationUnknown,
    UIDeviceOrientationPortrait,            // Device oriented vertically, home button on the bottom
    UIDeviceOrientationPortraitUpsideDown,  // Device oriented vertically, home button on the top
    UIDeviceOrientationLandscapeLeft,       // Device oriented horizontally, home button on the right
    UIDeviceOrientationLandscapeRight,      // Device oriented horizontally, home button on the left
    UIDeviceOrientationFaceUp,              // Device oriented flat, face up
    UIDeviceOrientationFaceDown             // Device oriented flat, face down
} __TVOS_PROHIBITED;
}

四种界面方向:

{
  typedef NS_ENUM(NSInteger, UIInterfaceOrientation) {
    UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,
    UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
    UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeRight,
    UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeLeft
} __TVOS_PROHIBITED;
}

解决的问题是:实现横向可旋转屏幕
解决方法如下:
实现方式一:
  当加速计检测到方向变化的时候,会发出通知,我们通过注册观察者,来获取屏幕旋转更新信息。
注册代码如下:

{
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doRotate:) name:UIDeviceOrientationDidChangeNotification object:nil];
}

监听到旋转屏幕时执行相应的方法:

{
- (void)doRotate:(NSNotification*)notification
{
    //监听到需要旋转时,先把虚拟键盘关掉,不然虚拟键盘夺取了焦点而旋转
    [[UIApplication sharedApplication].keyWindow endEditing:YES];
    //do something
}
}

注意:若旋转时虚拟键盘正在开启,会获取焦点,或导致本该旋转的界面没有旋转,因此可以先关闭掉虚拟键盘再旋转。
实现方式二:
借助生命周期方法:
viewDidDisappear:弹出的界面消失时,记录其方向
viewWillAppear:当再次出现时,与之前纪录的方向进行比较,若不同则进行相应的角度旋转,否则不旋转。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,062评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 15,376评论 4 61
  • 早上8点从北京阳光星苑出发途径涿州下午5点到达定兴,全程128公里,用时9小时。 旅途中碰到许多一样...
    原来是酱子阅读 239评论 0 0
  • 在我看来,真正的比赛从预备工作就已经开始了,它考验参赛者的谨慎,一位来自北京的女选手,途中自行车坐垫突然塌陷下来、...
    一沭阅读 223评论 0 0
  • 原文:三家者以《雍》彻。子曰:“'相维辟公,天子穆穆',奚取于三家之堂?” 此篇仍论礼制。 贵族三家在祭祀结束的时...
    哈皮波阅读 1,143评论 0 0

友情链接更多精彩内容