cocos2d 3.2版本IOS因键盘引起横竖屏问题

原创 2016年08月30日 10:32:11

在cocos2d 3.2版本中,在IOS8.0以上游戏才用横竖屏都支持后,弹出输入法,或者游戏切到后台弹出输入法再切回来会引起屏幕跑偏,修复方案如下:

修改CCEAGLView.mm文件,注意第一个case的处理

-(void) doAnimationWhenKeyboardMoveWithDuration:(float)duration distance:(float)dis
{
    [UIView beginAnimations:nil context:nullptr];
	[UIView setAnimationDelegate:self];
	[UIView setAnimationDuration:duration];
	[UIView setAnimationBeginsFromCurrentState:YES];
    
    //NSLog(@"[animation] dis = %f, scale = %f \n", dis, cocos2d::GLView::getInstance()->getScaleY());
    
    if (dis < 0.0f) dis = 0.0f;

    auto glview = cocos2d::Director::getInstance()->getOpenGLView();
	dis *= glview->getScaleY();
    
    if (self.contentScaleFactor == 2.0f)
    {
        dis /= 2.0f;
    }
    
    switch ([self getstatusBarOrientation])
    {
        case UIInterfaceOrientationPortrait:
            if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
            {
                self.frame = CGRectMake(originalRect_.origin.x, originalRect_.origin.y - dis, self.frame.size.width, self.frame.size.height);
            }else{
                self.frame = CGRectMake(originalRect_.origin.x, originalRect_.origin.y - dis, originalRect_.size.width, originalRect_.size.height);
            }
            break;
            
        case UIInterfaceOrientationPortraitUpsideDown:
            self.frame = CGRectMake(originalRect_.origin.x, originalRect_.origin.y + dis, originalRect_.size.width, originalRect_.size.height);
            break;
            
        case UIInterfaceOrientationLandscapeLeft:
            self.frame = CGRectMake(originalRect_.origin.x - dis, originalRect_.origin.y , originalRect_.size.width, originalRect_.size.height);
            break;
            
        case UIInterfaceOrientationLandscapeRight:
            self.frame = CGRectMake(originalRect_.origin.x + dis, originalRect_.origin.y , originalRect_.size.width, originalRect_.size.height);
            break;
            
        default:
            break;
    }
    
	[UIView commitAnimations];
}

在其他cocos版本中,采用以下方法处理:

-(void) doAnimationWhenKeyboardMoveWithDuration:(float)duration distance:(float)dis
{
    [UIView beginAnimations:nil context:nullptr];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDuration:duration];
    [UIView setAnimationBeginsFromCurrentState:YES];
 
    //NSLog(@"[animation] dis = %f, scale = %f \n", dis, cocos2d::GLView::getInstance()->getScaleY());   
    if (dis < 0.0f) dis = 0.0f;
    auto glview = cocos2d::Director::getInstance()->getOpenGLView();
    dis *= glview->getScaleY();   
    dis /= self.contentScaleFactor;
 
    switch (getFixedOrientation([[UIApplication sharedApplication] statusBarOrientation]))
    {
        case UIInterfaceOrientationPortrait:
            if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
            {
                self.frame = CGRectMake(originalRect_.origin.x, originalRect_.origin.y - dis, self.frame.size.width, self.frame.size.height);
            }else{
                self.frame = CGRectMake(originalRect_.origin.x, originalRect_.origin.y - dis, originalRect_.size.width, originalRect_.size.height);
            }
            break;           
 
        case UIInterfaceOrientationPortraitUpsideDown:
            self.frame = CGRectMake(originalRect_.origin.x, originalRect_.origin.y + dis, originalRect_.size.width, originalRect_.size.height);
            break;           
 
        case UIInterfaceOrientationLandscapeLeft:
            self.frame = CGRectMake(originalRect_.origin.x - dis, originalRect_.origin.y , originalRect_.size.width, originalRect_.size.height);
            break;           
 
        case UIInterfaceOrientationLandscapeRight:
            self.frame = CGRectMake(originalRect_.origin.x + dis, originalRect_.origin.y , originalRect_.size.width, originalRect_.size.height);
            break;
 
        default:
            break;
    }
    [UIView commitAnimations];
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【iOS-Cocos2d游戏开发之八】开启高清(960*640)模式问题与解答、图片适配以及设置iphone横竖屏

李华明Himi 原创,转载务必在明显处注明:【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2d/463.html     最近书已经进...

【iOS-Cocos2d游戏开发之三】CCScene切换的所有特效(27种)以及设置屏幕横竖屏!

Himi 原创,转载请注明! 原文地址:http://blog.csdn.net/xiaominghimi/article/details/6651281        CCSce...
  • Jerke
  • Jerke
  • 2012年02月21日 15:36
  • 206

【iOS-Cocos2d游戏开发】CCScene切换的所有特效(28种)以及设置屏幕横竖屏!

CCScene 对于使用cocos2d的童鞋肯定很熟悉,那么在使用   [[CCDirectorsharedDirector]replaceScene:];  对scene进行场景(CCLayout)...

【iOS-Cocos2d游戏开发之三】CCScene切换的所有特效(28种)以及设置屏幕横竖屏!

李华明Himi 原创,转载务必在明显处注明:转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2d/423.html       C...

cocos2d HelloWorld 项目横竖屏、自动旋转问题

首先看下 GameConfig.h 中的宏定义,配置: /** * Modified by Bruce Yang on 2012.09.06.13.51~ */ /** Supported ...

【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)/动画播放出现毛边以及禁止游戏中自动锁屏问题!【2011年12月18日补充】

李华明Himi 原创,转载务必在明显处注明:转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2d/507.html     本章节...

【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)以及禁止游戏中自动锁屏问题

原文地址:http://blog.csdn.net/xiaominghimi/article/details/6926913      本章节主要为大家介绍在游戏开发过程中经常遇到的两个问题...

关于Cocos2d-x在新版xcode下横竖屏设置

ios开发中屏幕的设置本来是一个很简单的问题,但是有时候由于各种问题就是不尽人意,这里面有一个问题有的人没注意,就是游戏的横竖屏设置和开发环境里模拟器屏幕的横竖摆放设置: 首先,很多博文都有教程通过代...
  • cordova
  • cordova
  • 2016年03月11日 09:18
  • 887

在Cocos2d-x上实现横竖屏切换

在Cocos2d-x上实现横竖屏切换 该demo使用引擎3.10版本,经测试在Android,PC上都OK 第一步在AppDelegate重写applicationScreenSizeChanged方...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cocos2d 3.2版本IOS因键盘引起横竖屏问题
举报原因:
原因补充:

(最多只允许输入30个字)