要求iPhone设备方向刷新

6
我正在为iPhone创建一个拼图游戏。 我的所有菜单等只能以纵向方向显示,但我的游戏可以在纵向或横向显示。
因此,当我在菜单中并且设备处于横向时,当我进入游戏视图控制器时,它会使用横向坐标进行布局,但屏幕实际上仍然是以纵向方式定位的:
我想在进行布局之前强制设备重新定向屏幕。 我该怎么做?
现在,我正在通过以下方式测试设备方向:
- (void) viewDidLoad {
    .
    .
    .

   if (!UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation])) {
      // Run Portrait Layout
   }
   else {
      // Run Landscape Layout
   }
}

我知道设备返回的方向是横屏,但由于某些原因,屏幕仍然定位为竖屏。


你在项目设置中启用了支持的方向吗?也许你被锁定为竖屏了? - anon_dev1234
谢谢,但不是那个问题。一旦我进入游戏玩法,旋转就可以正常工作。只有当设备处于横向时加载视图控制器才会出现此问题。 - bkbeachlabs
@aking63,让我来重新表述你的问题。就像,如果你在横屏模式下打开游戏,然后改变方向,那么你的视图不会刷新。对吗?所以你想在方向改变时每次都刷新视图? - Sanchit Paurush
@sanchitsingh 不,这只是最初的设置。一旦我改变手机的方向,它就会弄清楚应该做什么。但即使在pushViewController事件期间保持横向,它也会以纵向面向屏幕加载。 - bkbeachlabs
2个回答

18

也许尝试一下...

[UIViewController attemptRotationToDeviceOrientation];

viewDidLoad 或者 viewWillAppear 中,这样做将尝试进行方向更改。


这个神奇的方法在Swift 4.2中仍然像魔法一样有效!:UIViewController.attemptRotationToDeviceOrientation() - Nahuel Roldan

1

UIViewController 中有几个方法可以重写,以捕获视图旋转事件:

 willRotateToInterfaceOrientation:duration:
 willAnimateRotationToInterfaceOrientation:duration:
 didRotateFromInterfaceOrientation:

请查看UIViewController类参考

这不是我需要的。它能响应方向的改变,但有时初始状态并不正确。无论如何,感谢你的回答! - bkbeachlabs
好的。据我所理解,您不应该使用[[UIDevice currentDevice] orientation],而应该使用self.interfaceOrientation。 - xingzhi.sg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接