今天做项目,某一个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后复原的更多相关文章

  1. ios – 在sendEvent方法上崩溃

    当我在选择几个项目后旋转应用程序两次时,它会崩溃.我重写了sendEvent方法,这是调试器停止的地方.当我尝试打印事件类型时,它会向我显示一些奇怪的东西(我认为这是一个不存在的内存位置):不知何故,我认为这与我如何处理轮换有关.我有一个主–细节风格的应用程序,它使用不同类型的导航来拍摄风景,拍摄肖像和手机.我创建了一个名为NavigationFlowController的类,它处理所有导航事件并

  2. ios – UIDeviceOrientation ipad

    我有以下代码根据方向填充视图.这总是会返回景观.我正确地改变了视图–(void)animateRotation:(UIInterfaceOrientation)interfaceOrientation持续时间:(NSTimeInterval)持续时间{但是在更改播放列表时已经在横向或纵向中不起作用.解决方法而不是使用[[UIDevicecurrentDevice]orientation]来检查方向

  3. iOS 9中的强制视图控制器方向

    我正在制作一个摄影应用程序,允许以肖像或风景拍摄照片.由于项目的要求,我不能让设备方向自动旋转,但确实需要支持旋转.使用以下定位方法时:我可以在启动时正确设置旋转.通过更改方向值并调用UIViewController.attemptRotationToDeviceOrientation(),我能够支持旋转到新的所需接口.但是,此旋转仅在用户实际移动其设备时发生.我需要它自动发生.我可以调用:UID

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

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

  5. 只有在Swift中,如何将一个视图控制器的方向锁定到纵向模式

    由于我的应用程序支持所有方向.我想只将肖像模式锁定到特定的UIViewController.(e.g.AssumeitwasTabbedApplicationandwhenSignInViewappearmodally,IonlywantthatSignInViewtotheportraitmodeonlynomatterhowtheuserrotatethedeviceorhowthecurre

  6. 错误:screenSize | smallestScreenSize android studio Target SDK 23

    我正在尝试将heyZap广告集成到我的应用中,但我在构建时遇到此错误:错误:screenSize|smallestScreenSize).我搜索了它,我发现它的目标sdk错误应该至少为13但是在这里我使用的是SDK23.这是我的清单文件:这是我的build.gradle文件:这是错误的图片:这是我一直关注的链接:https://developers.heyzap.com/docs/android_

  7. Android ImageView按重量调整大小,不以父LinearLayout为中心

    理想情况下,我可以设置“重力”,或者设置宽度而不需要水平LinearLayout容器和重量的一些替代方法,因为没有那个容器我可以居中在我的顶级垂直LinearLayout中水平放置.谢谢!

  8. android – 保存数据并更改方向

    我有两个活动,我使用android:configChanges=“keyboardHidden|orientation|screenSize”一个主动用于纵向到第二个横向但是当方向发生变化时,会加载活动并丢失数据如何保存数据并更改活动方向?

  9. 在指定横向时,如何防止Android Activity暂时进入纵向模式?

    我怀疑这与应用程序在从纵向屏幕启动时自动旋转的事实有关.似乎奇怪的是,应用程序已被指示永远不会以纵向方式开始,然后快速更改.但是,有没有办法让它永远不会成像?我把它放在我的Activity’sonCreate中:这导致它永远卡在那里:)解决方法将此添加到您的活动中:

  10. android – 为什么我的Button的文字会被截断?

    我有一个正常的按钮,但是文字被截断了.我不知道为什么会这样.有谁可以分析它为什么会发生?

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部