解决CCEditBox 在iOS9下导致场景偏移的问题

本文介绍了解决Cocos2dx旧版本中输入框CCEditBox接收焦点后导致画面偏移的问题。通过修改特定代码,确保了在不同iOS设备及iOS版本上的一致性和稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,我的Cocos2dx 版本比较旧

cocos2d.x.version: 2.1rc0-x-2.1.4

一直没有时间升级…… 最近对旧项目在XCode7下重新编译,发现了很多很多问题……

一个重要的问题是:输入框CCEditBox接收焦点后,画面马上偏移!无法正常使用。

搜索了许多资料,总结解决方法如下:

1、官方的方法是在:

https://github.com/cocos2d/cocos2d-x/pull/8149

2、按照1修改后,能够进入输入了,画面不移动了,但是输入完成后,画面还是跑了!

再进行下述修改,则问题解决,并验证了iOS7等系统下正常运行!

CCEAGLView-ios.mm
-(void) doAnimationWhenKeyboardMoveWithDuration:(float)duration distance:(float)dis

    switch (getFixedOrientation([[UIApplication sharedApplication] statusBarOrientation]))
    {
        case UIInterfaceOrientationPortrait:
            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;
    }

修改成

    switch (getFixedOrientation([[UIApplication sharedApplication] statusBarOrientation]))
    {
        case UIInterfaceOrientationPortrait:
            self.frame = CGRectMake(originalRect_.origin.x, originalRect_.origin.y - dis, self.frame.size.width, self.frame.size.height);
            break;
            
        case UIInterfaceOrientationPortraitUpsideDown:
            self.frame = CGRectMake(originalRect_.origin.x, originalRect_.origin.y + dis, self.frame.size.width, self.frame.size.height);
            break;
            
        case UIInterfaceOrientationLandscapeLeft:
            self.frame = CGRectMake(originalRect_.origin.x - dis, originalRect_.origin.y , self.frame.size.width, self.frame.size.height);
            break;
            
        case UIInterfaceOrientationLandscapeRight:
            self.frame = CGRectMake(originalRect_.origin.x + dis, originalRect_.origin.y , self.frame.size.width, self.frame.size.height);
            break;
            
        default:
            break;
    } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值