如何使用viewWillTransitionToSize停止旋转

时间:2015-01-14 14:56:19

标签: ios objective-c autorotate

iOS 8提供了两种处理屏幕旋转的新方法。

ViewWillTransitionToSize和willTransitionToTraitCollection。

我的问题是,你如何停止这些方法的轮换?我们标志有一些布尔值吗?我们被迫手动设置一个特定的方向吗?

2 个答案:

答案 0 :(得分:2)

viewWillTransitionToSize:withTransitionCoordinator:用于通知容器其视图的大小即将更改,以便您可以执行与大小更改相关的任务。应使用以下内容在VC中调用特定方向的结果:

-(NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskPortrait;
}

编辑这是正确的调用方法,自> = iOS 6.0起可用,以编程方式锁定屏幕方向。

我会回答这个并知道答案,但由于这是一个重复的问题,我认为这是正当程序允许原始答案的投票和信用:

见这里:How do we dictate app orientation in iOS 8?

答案 1 :(得分:0)

JMD,我和你有同样的问题/问题,即禁用特定屏幕的自动旋转,但是为所有其他屏幕启用它。正如您所指出的,iOS 8中的supportedInterfaceOrientations()似乎没有做任何事情来解决问题。

我认为下面的代码使用viewWillTransitionToSize会像你一样工作,我知道如何更改shouldAutorotate的布尔属性;当我尝试使用代码

self.shouldAutorotate()。boolValue = true

我收到错误消息“无法分配给此表达式的结果”。当我评论该代码时,我得到下面的结果,所以我知道viewWillTransitionToSize正在运行:

从肖像模拟器中旋转设备 - > LandscapeLeft提供控制台消息:

会将尺寸更改过渡到(667.0,375.0)

shouldAutorotate Bool = true

身高< width:转换大小更改为(667.0,375.0)

然后从LandscapeLeft旋转模拟器中的设备 - >肖像提供

会将尺寸更改过渡到(375.0,667.0)

shouldAutorotate Bool = true

身高> width:转换大小更改为(375.0,667.0)

我知道这并没有完全回答你的问题,但也许其他人可以填补这些空白。

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {


    println("will transition size change to \(size)")
    var autorotateBoolValue = self.shouldAutorotate()
    println("shouldAutorotate Bool = \(autorotateBoolValue)")

    if (size.height > size.width) {

        coordinator.animateAlongsideTransition({context in

            println("height > width: transitioning size change to \(size)")}, completion: {context in
            self.shouldAutorotate().boolValue = true

        })

    }

    else {

        coordinator.animateAlongsideTransition({context in

            println("height < width: transitioning size change to \(size)")}, completion: {context in
            self.shouldAutorotate().boolValue = false

        })

    }

}