iOS 6 - 如何在方向改变时运行自定义代码
Posted
技术标签:
【中文标题】iOS 6 - 如何在方向改变时运行自定义代码【英文标题】:iOS 6 - How to run custom code when orientation changes 【发布时间】:2012-10-01 21:22:56 【问题描述】:我正在创建一个游戏,允许设备处于横向左或横向右方向,并且玩家可以在暂停时更改方向。当他们这样做时,我需要更改游戏根据方向解释加速度计的方式。
在 ios 5 中,我使用 willRotateToInterfaceOrientation 来捕获更改并更改我的变量,但在 iOS6 中已弃用。我现有的代码如下所示:
if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
rect = screenRect;
else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
rect.size = CGSizeMake( screenRect.size.height, screenRect.size.width );
GameEngine *engine = [GameEngine sharedEngine];
if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft)
engine.orientation = -1;
else
engine.orientation = 1;
我知道替换的是 UIViewController 类中的 viewWillLayoutSubviews 方法。我正在 cocos2d 2.1 中构建这个游戏,并且在演示项目中似乎没有 UIViewController 类,所以我不清楚如何合并它以及代码应该如何看起来才能使其工作。
【问题讨论】:
【参考方案1】:监听设备方向变化:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(deviceOrientationDidChangeNotification:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
收到通知后,从 UIDevice 获取设备方向:
- (void)deviceOrientationDidChangeNotification:(NSNotification*)note
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
switch (orientation)
// etc...
【讨论】:
+1 给定任务的正确选项。请小心,因为您还会收到有关正面与向下方向变化的通知,并注意UIInterfaceOrientation...
和UIDeviceOrientation...
之间的区别
@Darren 这正是我所需要的。谢谢!
@Till - 面朝上与朝下的意思是当它定向成纵向或纵向倒置时?或者是其他东西?此外,我假设 DeviceOrientation 和 InterfaceOrientation 几乎总是相同的,除非在特殊情况下(例如多个视图),或者如果 InterfaceOrientation 以编程方式设置为不匹配设备方向。或者是否还有其他可能导致问题的情况需要注意?
@JamesMorrison 设备方向和接口方向是两个不同的枚举和两个不同的概念。界面方向由软件控制(响应设备方向);例如,您的软件方向只会是横向左或横向右。设备方向由硬件控制,可以是任何时间,包括没有映射到界面方向的方向,如正面朝上或正面朝下。您只需要注意一个事实,即您需要忽略许多设备方向更改。以上是关于iOS 6 - 如何在方向改变时运行自定义代码的主要内容,如果未能解决你的问题,请参考以下文章