初衷

这是在工作中遇到BUG,然后解决BUG的历程。
希望我的思路及方向能对你有所启发。

现象

游戏在真机测试出现某些区域不响应的问题。

查原因

找反馈者沟通

去了解具体发生的问题及有无任何规律等。
了解到只在iPhone手机上才出现。

自己测试
  1. 黑盒
    方法:根据现象,进一步测试,打不同手机包等
    经过各种测试,总结出的特征如下:

    • 只有iPhone手机有问题(测试过几款Android手机 及 模拟器)
    • 只有边缘触摸有问题(将触摸区域移动过不同的位置)
    • 只有iPhone 6s以上手机有问题
  2. 白盒
    方法:打印触屏信息等。
    发现 开始触摸时并没有打印,但是在结束触摸时,开始触摸喝结束触摸同时相应。
    进一步打印,发现触摸开始和结束在同一帧执行

  3. 总结
    其实,在只有 iPhone 6s 以上手机有问题就比较好确定了。
    经过调查发现 6s开始支持了 3D touch。

解决

既然发现3D touch有关,那就关闭3D touch看看效果。
关闭以后发现,左右两边没有问题了,但是底边还是有问题。
又了解到苹果按住边缘滑动,会滑出任务管理器,这个好像没办法关掉…

然后,就去cocos2d的github的issues看有没有遇到同样的问题的。
发现也有人遇到了同样的问题,已经解决好了。 [ https://github.com/cocos2d/cocos2d-x/issues/18479 ]

解决方法就是将手势识别的触摸开始的延迟关掉。

在 AppController.mm 文件内,
[window makeKeyAndVisible]; 之后
加入:

for(UIGestureRecognizer* gesture in window.gestureRecognizers)
{gesture.delaysTouchesBegan=NO;
}

完美解决问题。
真是查问题5小时,解决问题5秒钟。

扩展

一般到这里,解决完问题就结束了。
BUG是无穷尽的,但是它们是有共性的。
我们遇到一个问题,通过分析它能解决一类问题,这才是进步。

UIGestureRecognizer 是手势识别器的基类。
它用于识别触摸序列(或其他输入)的逻辑进行解耦,并对该识别进行操作,负责发送操作消息或转发触摸消息等。
它主要有以下的手势:

  • UITapGestureRecognizer [轻拍手势]
  • UIPinchGestureRecognizer [捏合(缩放)手势]
  • UIRotationGestureRecognizer [旋转手势]
  • UISwipeGestureRecognizer [轻扫手势]
  • UIPanGestureRecognizer [平移手势]
  • UIScreenEdgePanGestureRecognizer [屏幕边缘平移手势]
  • UILongPressGestureRecognizer [长按手势]

如果窗口绑定了手势识别器,触摸事件会先经过手势识别器处理,再传递给视图。
如果手势识别器识别了触摸,则传给视图的其余触摸事件将会被取消。
它有三个主要的属性:

  • cancelsTouchesInView
    如果手势识别器识别出手势,则从视图中解除该手势的其余触摸,从而使窗口不再传递它们。
  • delaysTouchesBegan
    只要手势识别器分析触摸事件没有失败,窗口就会将UITouchPhaseBegan阶段中的触摸对象传递给视图。如果随后识别手势,则视图不接收这些触摸对象。
  • delaysTouchesEnded
    只要手势识别器分析触摸事件没有失败,窗口就会将UITouchPhaseEnded阶段中的触摸对象传递给视图。如果随后识别手势,则触摸被取消。

更详细的可以看 参考资料3

总结

遇到问题 -> 分析&总结特征 -> 解决问题 -> 扩展问题
针对同一个问题,学到的比其他人更多更广,长期以来,必将更进一步。

参考资料

  1. stackoverflow - TouchesBegan delay on left hand side of the display
    [https://stackoverflow.com/questions/39998489/touchesbegan-delay-on-left-hand-side-of-the-display]

  2. stackoverflow - Swift SpriteKit 3D Touch and touches moved
    [https://stackoverflow.com/questions/36060423/swift-spritekit-3d-touch-and-touches-moved]

  3. 苹果开发者 UIGestureRecognizer [https://developer.apple.com/documentation/uikit/uigesturerecognizer?changes=_4&language=objc]

关于iPhone边缘触摸延迟现象相关推荐

  1. java键盘监听延迟_解决JAVA键盘监听的延迟现象以及八个方向的运动

    首先解释一下键盘出现延迟的原因: 其实键盘为了用户体验,在按下一次按键之后,会有片刻的延迟,为什么会这样呢? 你想一下,当你打一个字母时,连着出来了好几个字母,你心里面的感受是怎么样的? 所以嘛,键盘 ...

  2. 解决JAVA键盘监听的延迟现象以及八个方向的运动

    首先解释一下键盘出现延迟的原因: 其实键盘为了用户体验,在按下一次按键之后,会有片刻的延迟,为什么会这样呢? 你想一下,当你打一个字母时,连着出来了好几个字母,你心里面的感受是怎么样的? 所以嘛,键盘 ...

  3. 苹果手机iPhone 8 触摸信号断线导致无触摸维修

    故障机型:iPhone8 故障现象:无触摸 维修过程:检测故障,开机手机在激活界面完全没有触摸.拆机,测量触摸显示座子对地阻值,发现第27脚TOUCH_TO_AOP_GPO_CONN对地阻值为OL. ...

  4. 视频流媒体服务器中怎么降低直播出现的延迟现象?

    我之前在很多文章中分享过我们流媒体服务器如何优化直播体验,详细讲解了各部分造成低延迟和卡顿的原因和相应的优化原理.实际上,音视频的直播系统是一个复杂的工程系统,要做到非常低延迟的直播,需要复杂的系统工 ...

  5. 解决鼠标右键点击后菜单延迟现象

      今日非常倒霉,早上起来一开机.不,应该是说早上起来一按电脑电源键,屏幕倒是亮了,可进不去桌面啊,只能卡在疑难解答界面.这是电脑第二次莫名其妙这样了,我保证昨天晚上啥也没干,嘿嘿.尝试一番操作后,还 ...

  6. 无家可归的iPhone

    by Fabrice Dubois 通过Fabrice Dubois 无家可归的iPhone (Homeless iPhone) So, apparently the next iPhone won' ...

  7. ESP32 触摸传感器应用方案简介

    ESP32 触摸传感器应用方案简介 ESP32 不仅提供核心的 Wi-Fi 和蓝牙功能,还集成了丰富的外设,不需要额外的外部元器件即可实现应用,比如,ESP32 支持具有 10 个触摸通道的触摸传感器 ...

  8. 2020什么牌子蓝牙耳机性价比高?十大高颜值游戏低延迟蓝牙耳机推荐

    如今随着手机的功能不断强大,手机的周边配件也是出现更多的时尚潮品,那么无线蓝牙耳机肯定是不可缺少的必需品了.蓝牙耳机在生活中不同的场合和场景都会用到:开车.听歌.运动.游戏.看影视...... 那么如 ...

  9. 游戏蓝牙耳机哪款好?年末盘点:高性价比低延迟蓝牙耳机排名

    自2016年iPhone 7取消了3.5mm的耳机接口,并且发布了发布了第一代AirPods,真无线蓝牙耳机就出现在人们的视野之中,随着时间的推移,各大耳机手机厂商逐步掌握和完善了真无线蓝牙耳机技术, ...

  10. 移动端触屏click点击事件延迟问题,以及tap的解决方案

    在移动端 触屏click事件虽然也会响应,但是总感觉是有延迟,一直听说click事件在手机上有200~300毫秒的延迟问题,亲自测了一下,在pc端模拟手机的话是测不出来的,但是用手机测试时发现延迟非常 ...

最新文章

  1. WCF单元测试遇到的问题
  2. SpringBoot24 SpringDataJPA环境搭建、实体类注解、关联查询
  3. 软件项目获取用户需求的沟通技巧(摘自IT168技术频道)
  4. linux基本安全配置手册
  5. P2444-[POI2000]病毒【AC自动机】
  6. 本月 Windows Mobile 文章推荐
  7. 【C++深度剖析教程15】经典问题解析之关于string的疑问
  8. mysql update nowait_MySQL 8.0新特性 -- nowait以及skip locked
  9. 最优视频监控软件开发的实现方法
  10. Python爬虫实战(一):爬糗事百科段子
  11. ACM经验分享[转]
  12. 删除一行下方单元格上移_openpyxl3.0官方文档(5)——插入和删除行和列,移动单元格...
  13. 安装指定的vue-router版本
  14. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_13-MongoDb入门-数据库和集合...
  15. 注册表右键取得管理员权限
  16. 视频教程-2021软考网络工程师 案例分析视频教程-软考
  17. 升级Spring Boot 2.x后RelaxedPropertyResolver不可用的解决方案
  18. 美国物流发展趋势对中国物流的影响
  19. Output Shape和Param参数解释
  20. Matplotlib系列(一):快速绘图入门

热门文章

  1. java 中的连接超时_【java中处理http连接超时的方法】
  2. Win11修改Hosts文件无法保存怎么解决?
  3. 苹果内购那些事儿(二)
  4. 关于H.265/HEVC视频压缩标准相较H.264/AVC节省50%左右的带宽方案的推荐
  5. 数据量太大,节省内存的几种方式
  6. Python爬网易云音乐的那些事
  7. 联想小新air13pro重装系统_联想小新Air13Pro笔记本U盘重装win10系统教程
  8. Scala——面向对象和函数式编程语言
  9. 企业如何做好数据防泄漏需求分析
  10. Cannot find module /node_modules/cz-conventional-changelog