我如何以编程方式检查iOS设备方向是否已锁定?在UIDevice中我找不到任何信息。我知道这应该对应用程序透明,但如果方向被锁定(如Youtube应用程序所做的那样;它会锁定为横屏而不是竖屏),我想更改显示内容的方式。这肯定是可能的。
我如何以编程方式检查iOS设备方向是否已锁定?在UIDevice中我找不到任何信息。我知道这应该对应用程序透明,但如果方向被锁定(如Youtube应用程序所做的那样;它会锁定为横屏而不是竖屏),我想更改显示内容的方式。这肯定是可能的。
UIAccelerometer
类来详细确定手机的方向。如果加速度矢量进入其最大绝对分量位于X轴的状态,则为横向方向。理论上,这可以用于检测方向锁定:如果在发生这种情况的几秒钟内,控制器没有收到shouldRotateToInterfaceOrientation
的调用,并且[[UIDevice currentDevice] orientation]
属性不是横向的,则可以安全地假定用户已将方向锁定。shouldRotateToInterfaceOrientation
会在实际向量实际进入横向区域之后很长时间才被调用。整个想法有点像黑客行为,您应该重新考虑为什么需要在用户不想显示它们时呈现横向视图。没有方法可以检测方向是否被锁定。YouTube应用程序不会锁定到横向模式,它只是以横向方向显示视频,但是如果您旋转iPhone,视频也会随之旋转(如果没有方向锁定)。
也就是说,方向锁定由系统处理,对于您的应用程序来说是透明的。
如果您想实现此功能-即使iPhone处于纵向模式,也要以横向模式显示您的视图,然后启用视图的旋转。它将以与YouTube应用程序相同的方式工作。
更新评论:
.h
BOOL rotationEnabled;
.m
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return rotationEnabled || ( toInterfaceOrientation == UIInterfaceOrientationLandscapeRight );
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
rotationEnabled = YES;
}
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) toInterfaceOrientation { toInterfaceOrientation == UIInterfaceOrientationLandscapeRight;}
但这会禁用自动旋转。 - wombat57shouldAutorotateToInterfaceOrientation:
方法已被弃用,但新的方法preferredInterfaceOrientationForPresentation
将为您提供与此片段相同的行为,而无需任何其他代码。 - John Starr Dewar我认为你无法找出方向是否被锁定。我之前搜索过,但没有发现任何信息。你可以忽略方向并在你的视图控制器中仅提供横向模式...然后它将以横向模式显示,无论如何。
我认为这也是 YouTube 所做的。
-[UIViewController shouldRotateToInterfaceOrientation:]
将被调用。 - user142019