cocos2dx 2.2.5 CCEditBox IOS 适配问题
CCEditBox 在IPad上显示正常的, 但是 点击后进入编辑状态时,里面的文字没有适配,还是IPhone那样小!
首先在 CCEditBox 源文件找到 如下的函数:
void CCEditBox::touchDownAction(CCObject *sender, CCControlEvent controlEvent) { m_pEditBoxImpl->openKeyboard(); }
很明显示,这里是打开键盘(除非你的英语不过关吧!)!这里 m_pEditBoxImpl 是 CCEditBoxImpl 类!
直接转到这个类的头文件里,在这里找到了openKeyboard() 这个函数,是一个虚函数:
virtual void openKeyboard() = 0;
然后,找到 CCEditBoxImplIOS 这个类的头文件,这个类是继承了 CCEditBoxImpl 类
然而在这个头文件里找到了一个openKeyboad 函数:(这个函数是用Objective-C 写的)
-(void) openKeyboard;
打开 CCEditBoxImplIOS 的源文件, 然后找到最下面的一个函数实现:(很熟悉吧,没错,这个就是CCEditBoxImpl类里的虚函数! 在CCEditBoxImplIOS源文件里重写了!)
void CCEditBoxImplIOS::openKeyboard() { m_pLabel->setVisible(false); m_pLabelPlaceHolder->setVisible(false); m_systemControl.textField.hidden = NO; [m_systemControl openKeyboard]; }
最后调用到 [m_systemControl openKeyboard]; 函数的实现如下,这里是Objective-C的代码,我们可以再这里修改;最后我选择在 CCEditBoxImplIOS 的覆盖函数里面修改;
-(void) openKeyboard { [[EAGLView sharedEGLView] addSubview:textField_]; [textField_ becomeFirstResponder]; }
我们游戏的设计屏幕大小是 960*640;首先得到屏幕X与Y的缩放的倍数;然后取得标准拉伸倍数
CCDirector* pDirecotr = CCDirector::sharedDirector(); float scaleX = pDirecotr->getWinSizeInPixels().width / 960; float scaleY = pDirecotr->getWinSizeInPixels().height / 640; float scale = scaleX > scaleY ? scaleY : scaleX; // 得到标准拉伸倍数
然后将 m_systemControl.textField 的大小乘以 标准拉伸大小scale,再设置 m_systemControl.textField 的font 的大小 乘以 标准拉伸scale
直接上代码了:
void CCEditBoxImplIOS::openKeyboard() { m_pLabel->setVisible(false); m_pLabelPlaceHolder->setVisible(false); /******* *** add by author: zero *** description : CCEditBox 适配问题,这里只是IOS的 *******/ CCDirector* pDirecotr = CCDirector::sharedDirector(); float scaleX = pDirecotr->getWinSizeInPixels().width / 960; float scaleY = pDirecotr->getWinSizeInPixels().height / 640; float scale = scaleX > scaleY ? scaleY : scaleX; CGSize size = [m_systemControl.textField frame].size; [m_systemControl setContentSize:CGSizeMake(size.width * scale, size.height * scale)]; // m_isFirstTouch 是 头文件定义的bool类型变量,初始化列表中设置值为true; // 第一次进来的时候才设置m_systemControl.textField的size,不然的话,每点击一次字段就变大一次! if (m_isFirstTouch) { CGFloat height = m_systemControl.textField.font.pointSize; m_systemControl.textField.font = [UIFont systemFontOfSize:height*scale]; m_isFirstTouch = false; } m_systemControl.textField.hidden = NO; [m_systemControl openKeyboard]; }
这样放上去后,就可以了!适配已经完美了!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。