关于cocos2d-x 中 CCEditBox 的输入位置和IOS虚拟键盘位置不重合的bug

2024-06-17 10:32

本文主要是介绍关于cocos2d-x 中 CCEditBox 的输入位置和IOS虚拟键盘位置不重合的bug,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关于cocos2d-x 中 CCEditBox 的输入位置和IOS虚拟键盘位置不重合的bug

这个文章的名字起的实在是有点长,主要是怕说不清楚。

在IOS上,输入时,我看到过的比较少,就两种,如附件两张图。一个是虚拟键盘的输入框完全是在CCEditBox上,另一张虚拟键盘的输入区域是紧挨着键盘的并且左对齐的。

我的cocos2d版本是2.1rc0-x-2.1.4,貌似是当前最新的。

因为项目需要,我使用了CCEditBox,实现一个聊天的功能。ipad上运行时发现,键盘自带的输入区域既不在CCEditBox上,也没有紧挨着键盘左对齐。

这就是需要我们调整虚拟键盘输入域的位置了。查看了CCEditBoxImplIOS.mm文件,发现方法adjustTextFieldPosition是调整这个文本域的位置的。看逻辑没什么错,为什么不是我需要的效果呢。

现在网上查,很多人说这是CCEditBox的bug,必须要把CCEditBox对象加到大小是全屏的父节点中。。。我晕,怎么可能,界面层级关系有要求,节点很多,父节点不可能是全屏的节点。 还有人说设置position的时候取父节点的position。还有人说必须要把CCEditBox先加到父节点中去,然后设置其position。这些我都尝试了。发现,啥都没用。

然后仔细研究了adjustTextFieldPosition方法,代码如下。

复制代码
1 void CCEditBoxImplIOS::adjustTextFieldPosition()
2 {
3     CCSize contentSize = m_pEditBox->getContentSize();
4     CCRect rect = CCRectMake(0, 0, contentSize.width, contentSize.height);
5     rect = CCRectApplyAffineTransform(rect, m_pEditBox->nodeToWorldTransform());
6     
7     CCPoint designCoord = ccp(rect.origin.x, rect.origin.y + rect.size.height);
8     [m_systemControl setPosition:convertDesignCoordToScreenCoord(designCoord, m_bInRetinaMode)];
9 }
复制代码

其中第5行的nodeToWorldTransform方法代码是这样的,很明显,都已经向上取了所有父节点来把当前节点的坐标进行转换的。

复制代码
1 CCAffineTransform CCNode::nodeToWorldTransform()
2 {
3     CCAffineTransform t = this->nodeToParentTransform();
4 
5     for (CCNode *p = m_pParent; p != NULL; p = p->getParent())
6         t = CCAffineTransformConcat(t, p->nodeToParentTransform());
7 
8     return t;
9 }
复制代码

所以问题就在调用adjustTextFieldPosition方法的时机了。发现只在setPosition 和 onEnter 两个方法里边调用。这样当你还没有加入父节点时,nodeToWorldTransform方法的for循环其实起不了多大作用,就是没法将你当前CCEditBox的坐标转换为全屏这样的坐标了。

所以我得解决方法是,在打开键盘时,也就是openKeyboard方法中调用adjustTextFieldPosition,结果完全OK了。

复制代码
1 void CCEditBoxImplIOS::openKeyboard()
2 {
3     m_pLabel->setVisible(false);
4     m_pLabelPlaceHolder->setVisible(false);
5 
6     m_systemControl.textField.hidden = NO;
7     adjustTextFieldPosition();// add by elan 2013-07-24
8     [m_systemControl openKeyboard];
9 }

这篇关于关于cocos2d-x 中 CCEditBox 的输入位置和IOS虚拟键盘位置不重合的bug的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069192

相关文章

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”问题

《VMWare报错“指定的文件不是虚拟磁盘“或“Thefilespecifiedisnotavirtualdisk”问题》文章描述了如何修复VMware虚拟机中出现的“指定的文件不是虚拟... 目录VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virt

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

键盘快捷键:提高工作效率与电脑操作的利器

键盘快捷键:提高工作效率与电脑操作的利器 在数字化时代,键盘快捷键成为了提高工作效率和优化电脑操作的重要工具。无论是日常办公、图像编辑、编程开发,还是游戏娱乐,掌握键盘快捷键都能带来极大的便利。本文将详细介绍键盘快捷键的概念、重要性、以及在不同应用场景中的具体应用。 什么是键盘快捷键? 键盘快捷键,也称为热键或快捷键,是指通过按下键盘上的一组键来完成特定命令或操作的方式。这些快捷键通常涉及同

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

Linux Centos 迁移Mysql 数据位置

转自:http://www.tuicool.com/articles/zmqIn2 由于业务量增加导致安装在系统盘(20G)磁盘空间被占满了, 现在进行数据库的迁移. Mysql 是通过 yum 安装的. Centos6.5Mysql5.1 yum 安装的 mysql 服务 查看 mysql 的安装路径 执行查询 SQL show variables like

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。