小胖说swift11-------- ios 进入某个VC强转为横屏,出VC后复原

小胖说swift11-------- ios 进入某个VC强转为横屏,出VC后复原,第1张

概述今天做项目,某一个VC需要展现VR展览内容,产品要求这个VC可以横屏查看,因为横屏查看的时候,看的范围比较大,但是其余的VC都是竖屏显示的,为了达到某个VC横屏显示其余VC不变的效果,然后查询资料,撸代码。。 查询过资料之后,大概分为四种实现方式,我使用的是第四种实现方法。 第一种:重写方法:shouldAutorotate 和supportedInterfaceOrientations 写一个子

今天做项目,某一个VC需要展现VR展览内容,产品要求这个VC可以横屏查看,因为横屏查看的时候,看的范围比较大,但是其余的VC都是竖屏显示的,为了达到某个VC横屏显示其余VC不变的效果,然后查询资料,撸代码。。

查询过资料之后,大概分为四种实现方式,我使用的是第四种实现方法。

第一种:重写方法:shouldautorotate 和supportedInterfaceOrIEntations 写一个子类CusNavigationController 继承 UINavigationController,在CusNavigationController中重写方法:shouldautorotate 和 supportedInterfaceOrIEntations
overrIDe var shouldautorotate: Bool {        return false    }    var supportedInterfaceOrIEntations: UIInterfaceOrIEntationMask {        return .portrait    }
在AppDelegate中设置RootVIEwController为CusNavigationController容器的VC

然后再A里边重写shouldautorotate 和 supportedInterfaceOrIEntations方法

Bool {      return true  }  UIInterfaceOrIEntationMask {      return [.landscapeleft,.landscapeRight]  }

这样的话,就可以支持在A页面的时候旋转VC了。

第二种:强制转换 注意:Apple在3.0以后都不支持这个办法了,这个办法已经成为了私有的了,但是要跳过App Stroe的审核,需要一点巧妙的办法。
//swift3的时候orIEntation这个参数可能报错,直接用0,1,2,3代替方向即可NSNumber *orIEntationTarget = [NSNumber numberWithInt:orIEntation];[[UIDevice currentDevice] setValue:orIEntationTarget forKey:@"orIEntation"];
第三种:通过人为的办法改变vIEw.transform的属性。 这个很繁琐,一般不推荐使用,因为里边的布局需要自己一个vIEw一个vIEw的重新布局,如果又想用的,可以参考:
http://www.cnblogs.com/mrhgw/archive/2012/07/18/2597218.html(http://www.cnblogs.com/mrhgw/archive/2012/07/18/2597218.html) 第四种:通过appDelgate和第二种方法结合的方式实现 在appdelegate中设置代码如下:
/// 设置横屏/竖屏显示  func application(_ application: UIApplication,supportedInterfaceOrIEntationsFor window: UIWindow?) -> if changeOrIEntation {          else {          return .portrait      }  }

然后再需要实现选择的VC中设置代码如下:

overrIDe vIEwWillAppear(_ animated: Bool) {      super.vIEwWillAppear(animated)      //打开试图的横屏显示      AppDelegate.shareInstance().changeOrIEntation = true  }  vIEwWilldisappear(super.vIEwWilldisappear(animated)      //将试图还原为竖屏      AppDelegate.shareInstance().changeOrIEntation = false      UIDevice.current.setValue(NSNumber(value: 1),forKey: "orIEntation")  }

再通过实现系统的方法,改变vIEw里边的布局

willAnimateRotation(to toInterfaceOrIEntation:UIInterfaceOrIEntation,duration: TimeInterval) {      if (UIInterfaceOrIEntationIsPortrait(toInterfaceOrIEntation)) {          self.standScreen()      }      UIInterfaceOrIEntationIsLandscape(toInterfaceOrIEntation)) {          self.acrossScreen()      }  }  standScreen() {      contentVIEw?.frame = CGRect(x: 0,y: NavigationbarHeight,wIDth: SCREEN_WIDTH,height: SCREEN_HEIGHT)      self.customNavbar?.wIDth = SCREEN_WIDTH  }  acrossScreen() {      contentVIEw?.frame = SCREEN_HEIGHT,0)">SCREEN_WIDTH)      SCREEN_HEIGHT  }
我这里只有一个webvIEw(contentVIEw)和一个导航栏(self.customNavbar)改变一下frame就可以了 我的简书链接:http://www.jianshu.com/p/0d5ea1515f7d 总结

以上是内存溢出为你收集整理的小胖说swift11-------- ios 进入某个VC强转为横屏,出VC后复原全部内容,希望文章能够帮你解决小胖说swift11-------- ios 进入某个VC强转为横屏,出VC后复原所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1069746.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存