标签:des style blog io color ar os sp 文件
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];
}
这样放上去后,就可以了!适配已经完美了!
cocos2dx 2.2.5 CCEditBox IOS 适配问题
标签:des style blog io color ar os sp 文件
原文地址:http://www.cnblogs.com/panazhiyong/p/4071264.html