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];
}

  这样放上去后,就可以了!适配已经完美了!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。