如何以编程方式检查iOS中是否锁定了设备方向?我在UIDevice中什么都看不到。我知道这应该对应用程序透明。但是如果方向被锁定,我想改变显示内容的方式(正如Youtube应用程序所做的那样;它会锁定到横向而不是纵向)。这一定是可能的。
答案 0 :(得分:8)
您可以使用UIAccelerometer
课程详细确定手机的方向。如果加速度矢量进入其最大绝对分量在X轴上的状态,那就是横向。从理论上讲,这可以用来检测方向锁:如果在发生这种情况的几秒钟内,控制器没有接到对shouldRotateToInterfaceOrientation
的呼叫,并且[[UIDevice currentDevice] orientation]
属性不在横向,你然后可以安全地假设用户锁定了方向。
这很复杂,并且有一个延迟,因为在实际矢量实际进入景观区域后,shouldRotateToInterfaceOrientation
将被很好地调用。整个想法有点像黑客,你可能应该重新考虑为什么当用户有偏好不显示景观视图时你真的需要呈现景观视图。
答案 1 :(得分:7)
如何检测方向是否锁定无法实现。 YouTube应用不会锁定横向,它只是横向显示电影,但是当您旋转iPhone时,电影也会旋转(如果没有方向锁定)。
IOW方向锁由系统处理,对您的应用程序透明。
如果您想要实现此功能 - 即使iPhone处于纵向模式并稍后启用视图旋转,也只能以横向模式显示视图。它的行为方式与YouTube应用程序相同。
评论更新:
.h
BOOL rotationEnabled;
.m
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return rotationEnabled || ( toInterfaceOrientation == UIInterfaceOrientationLandscapeRight );
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
rotationEnabled = YES;
}
答案 2 :(得分:0)
我认为您无法确定方向是否已锁定。我前段时间寻找过,却一无所获。您可以做的是忽略方向,只在视图控制器中提供景观......然后无论如何都会以横向显示。
我认为这也是youtube正在做的事情。