iOS 8提供了两种处理屏幕旋转的新方法。
ViewWillTransitionToSize和willTransitionToTraitCollection。
我的问题是,你如何停止这些方法的轮换?我们标志有一些布尔值吗?我们被迫手动设置一个特定的方向吗?
答案 0 :(得分:2)
viewWillTransitionToSize:withTransitionCoordinator:
用于通知容器其视图的大小即将更改,以便您可以执行与大小更改相关的任务。应使用以下内容在VC中调用特定方向的结果:
-(NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskPortrait;
}
编辑这是正确的调用方法,自> = iOS 6.0起可用,以编程方式锁定屏幕方向。
我会回答这个并知道答案,但由于这是一个重复的问题,我认为这是正当程序允许原始答案的投票和信用:
答案 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
})
}
}