iOS收藏iOS开发心得iOS

iOS强制横屏总结

2016-07-28  本文已影响21249人  sfandy
总体方向两点:

接下来说说push方式强制旋转横屏时遇到的坑吧.....

遇到的问题描述:
小总结下:

故此,我又回到全部push方式继续坑........

因为我也不想啊,如果用present方式涉及改动的代码模块太多了.....

其实有点不明白的是,产品为何如此设计:横屏和竖屏,全模块之间的跳转,试问这样真的好吗.........

接下来分析下push方式,仅限于参考和积累问题吧:

解决方案:

先说下思路吧:

1.实时的更新当前应用所支持的方向,手动调用方法-    (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window;
2.把当前控制器的方向给到当前navigation,一定要保证统一,不能乱套,否则会导致界面来回跳转错乱的问题;
3.及时刷新当前控制器,手动调用方法[UIViewController attemptRotationToDeviceOrientation]。

一、 present方式:
就不多说了,调用系统的三个方法,基本上没什么问题。

二、push方式:

  重点说明:
  1.离开横屏时、横屏中跳转,记得强制旋转至竖屏;
  2.如果没有及时旋转至横屏,会导致[UIScreen mainScreen].bounds没有及时更新,从而影响其它模块的布局问题;

 - (void)viewWillDisappear:(BOOL)animated 
  {
    [super viewWillDisappear:animated];
     //强制旋转竖屏
    [self forceOrientationPortrait];
    CKNavigationController *navi = (CKNavigationController *)self.navigationController;
    navi.interfaceOrientation = UIInterfaceOrientationPortrait;
    navi.interfaceOrientationMask = UIInterfaceOrientationMaskPortrait;

     //设置屏幕的转向为竖屏
    [[UIDevice currentDevice] setValue:@(UIDeviceOrientationPortrait) forKey:@"orientation"];
    //刷新
    [UIViewController attemptRotationToDeviceOrientation];
   }

  #pragma  mark 横屏设置
  //强制横屏
- (void)forceOrientationLandscape
  {
    CKAppDelegate *appdelegate=(CKAppDelegate *)[UIApplication sharedApplication].delegate;
    appdelegate.isForceLandscape=YES;
    appdelegate.isForcePortrait=NO;
    [appdelegate application:[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:self.view.window];
  }

  //强制竖屏
 - (void)forceOrientationPortrait
  {
    CKAppDelegate *appdelegate=(CKAppDelegate *)[UIApplication sharedApplication].delegate;
    appdelegate.isForcePortrait=YES;
    appdelegate.isForceLandscape=NO;
    [appdelegate application:[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:self.view.window];
  }

- (BOOL)prefersStatusBarHidden{
    return YES;
}
感受

以上所述,支持iOS7、8、9系统,经iphone \iPod测试过,但貌似iOS8从横屏挑战至其它竖屏的界面,偶尔会有问题,概率很小,不影响。
原因:可能是iOS8 SDK与其它不同吧。

更新iOS8的问题:

   iOS8-8.4,横屏跳转至其它界面,最好延迟跳转,不然其它界面的viewWillApper会比横屏的viewWillDisApper先执行,导致无法旋转回来。
   CGFloat timef = 0.8;
    //主要是转屏之后view的再次旋转
    if (kSystemVersion>8||kSystemVersion<8.4) {
        self.view.hidden = YES;
        [self viewWillDisappear:NO];
        timef = 0.1;
    }
    dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, timef*NSEC_PER_SEC);
    dispatch_after(time, dispatch_get_main_queue(), ^{
        dispatch_async(dispatch_get_main_queue(), ^(){
           //跳转界面
        });
    });

参考资料:
http://www.cocoachina.com/bbs/read.php?tid=244119

上一篇下一篇

猜你喜欢

热点阅读