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 - 如何在方向改变时运行自定义代码的主要内容,如果未能解决你的问题,请参考以下文章

ios怎么改变全局的导航条返回按钮

iOS8--改变方向后键盘消失

ios10自定手势有啥用

如何防止自定义视图在屏幕方向更改时丢失状态

iOS 自定义键盘自动布局

IOS 自定义表格单元格不会自动调整宽度以更改方向