iOS 8 自动旋转将图像旋转到屏幕外

Posted

技术标签:

【中文标题】iOS 8 自动旋转将图像旋转到屏幕外【英文标题】:iOS 8 autorotate rotates images off the screen 【发布时间】:2014-10-05 16:54:57 【问题描述】:

所以我最近从客户那里听说了一个奇怪的问题。当他们尝试旋转屏幕时,屏幕会变黑。这似乎只是 ios 8 的事情,因为我的最新版本只是将 iOS 8 添加到组合中。

从我的视图控制器:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 

    //
    // There are 2 ways to support auto-rotation:
    //  - The OpenGL / cocos2d way
    //     - Faster, but doesn't rotate the UIKit objects
    //  - The ViewController way
    //    - A bit slower, but the UiKit objects are placed in the right place
    //

#if GAME_AUTOROTATION==kGameAutorotationNone
    //
    // EAGLView won't be autorotated.
    // Since this method should return YES in at least 1 orientation, 
    // we return YES only in the Portrait orientation
    //
    return ( interfaceOrientation == UIInterfaceOrientationPortrait );

#elif GAME_AUTOROTATION==kGameAutorotationCCDirector
    //
    // EAGLView will be rotated by cocos2d
    //
    // Sample: Autorotate only in landscape mode
    //
    if( interfaceOrientation == UIInterfaceOrientationLandscapeLeft ) 
        [[CCDirector sharedDirector] setDeviceOrientation: kCCDeviceOrientationLandscapeRight];
     else if( interfaceOrientation == UIInterfaceOrientationLandscapeRight) 
        [[CCDirector sharedDirector] setDeviceOrientation: kCCDeviceOrientationLandscapeLeft];
    

    // Since this method should return YES in at least 1 orientation, 
    // we return YES only in the Portrait orientation
    return ( interfaceOrientation == UIInterfaceOrientationPortrait );

#elif GAME_AUTOROTATION == kGameAutorotationUIViewController
    //
    // EAGLView will be rotated by the UIViewController
    //
    // Sample: Autorotate only in landscpe mode
    //
    // return YES for the supported orientations

    return ( UIInterfaceOrientationIsLandscape( interfaceOrientation ) );

#else
#error Unknown value in GAME_AUTOROTATION

#endif // GAME_AUTOROTATION


    // Shold not happen
    return NO;


-(BOOL)shouldAutorotate

    return YES;



-(NSUInteger)application:(UIApplication*)application supportedInterfaceOrientationsForWindow:(UIWindow *)window

    return UIInterfaceOrientationMaskLandscape;


-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

    return UIInterfaceOrientationLandscapeRight;

我能够在我的设备和模拟器上重现它......

横向左侧 肖像 横向右

根据这个类似的 iPad 测试,我可以判断的是,图像实际上会自行旋转离开屏幕。即使游戏是横向的,我目前也允许所有 4 个方向,因为我正在使用游戏中心,并且至少一些较旧的 iOS 需要纵向登录。我使用的是相当旧的 cocos2d 版本(v1.1.0-beta2b),但我以前从未经历过这样的事情。我可能只是更改支持的方向并关闭自动旋转,但我想修复它。这是怎么回事?

【问题讨论】:

【参考方案1】:

我在为 ios8 编译时也遇到了 cocos1.0 的问题。在我的代码中,我发现我确实有一个 UIViewController 用作根视图控制器(它的子视图在 Cocos2D 使用的 EAGLView 中)。

我找到的解决方法是从我的 UIViewController 中注释以下方法

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

我已经在ios8和ios7上做了快速测试,它可以工作

【讨论】:

也适合我。 非常感谢!每次 iOS 更新都会破坏我的旧 cocos2d 应用程序哈哈。

以上是关于iOS 8 自动旋转将图像旋转到屏幕外的主要内容,如果未能解决你的问题,请参考以下文章

iOS 中的自动布局

如何将旋转按钮添加到 Android 图像裁剪屏幕?

相机图像选择器控件 - iOS7 中的自动旋转

单击时将图像添加到屏幕并允许其可拖动/可旋转

iOS 7 旋转设备未检测到横向屏幕边界

iOS Swift 检测图像旋转