博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS UIButton放到页面底部延迟响应touchDown事件
阅读量:2123 次
发布时间:2019-04-30

本文共 866 字,大约阅读时间需要 2 分钟。

第1部分:说明

最近在做一个类似微信语音聊天的功能,在屏幕的底部放一个Button,按下时可以语音说话,松开时将语音发出去。但是做的过程中遇到一个坑:按钮放到页面最底部的时候会延迟touchDown事件。

第2部分:解决步骤

  1. 在网上找了一些回答,好多都是说受到TableView或ScrollView的影响,但尝试去掉TableView后依然没有解决。
  2. 考虑是不是UI层级太深,影响到事件的响应,尝试减少到一个层级后依赖无效。
  3. 后来干脆新建了一个UIViewController,页面上只放了一个UIButton,去掉任何多余的代码(这样可以不排队其它因素的干扰)发现还是有问题。
  4. 设想是不是Button只放到底部才有问题,果断尝试将Button放到屏幕的上面、中间、下面测试,发现只有有下面的会延迟touchDown。又尝试将该按钮往上移动一点点,发现往上移动二三十的距离的时候就没有问题了。这个时候果断猜测是系统的一个坑。
  5. 经过了解是WWDC 2017之后对UIKit在iOS系统下新增了一些API:
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(watchos, tvos);

该方法表示屏幕边缘的手势动作(Screen Edge Gesture),一般来说都是由系统管理的,在控制器下重写这个方法,可以让自己的手势优先被调用。

第3部分:最终解决方案

很简单,在你的UIViewController中重写该方法,添加以下代码即可。

- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures {    return UIRectEdgeBottom;}

第4部分:总结

感觉这应该是苹果在开发时忽略的一个bug,虽然最终要解决它不是很复杂,但是找到解决方案还是耗费了不少时间,这样的问题还真的是挺坑的,在此记录一下。

转载地址:http://xmdrf.baihongyu.com/

你可能感兴趣的文章
Leetcode C++《热题 Hot 100-45》338.比特位计数
查看>>
读书摘要系列之《kubernetes权威指南·第四版》第一章:kubernetes入门
查看>>
Leetcode C++《热题 Hot 100-46》739.每日温度
查看>>
Leetcode C++《热题 Hot 100-47》236.二叉树的最近公共祖先
查看>>
Leetcode C++《热题 Hot 100-48》406.根据身高重建队列
查看>>
《kubernetes权威指南·第四版》第二章:kubernetes安装配置指南
查看>>
Leetcode C++《热题 Hot 100-49》399.除法求值
查看>>
Leetcode C++《热题 Hot 100-51》152. 乘积最大子序列
查看>>
[Kick Start 2020] Round A 1.Allocation
查看>>
Leetcode C++ 《第181场周赛-1》 5364. 按既定顺序创建目标数组
查看>>
Leetcode C++ 《第181场周赛-2》 1390. 四因数
查看>>
阿里云《云原生》公开课笔记 第一章 云原生启蒙
查看>>
阿里云《云原生》公开课笔记 第二章 容器基本概念
查看>>
阿里云《云原生》公开课笔记 第三章 kubernetes核心概念
查看>>
阿里云《云原生》公开课笔记 第四章 理解Pod和容器设计模式
查看>>
阿里云《云原生》公开课笔记 第五章 应用编排与管理
查看>>
阿里云《云原生》公开课笔记 第六章 应用编排与管理:Deployment
查看>>
阿里云《云原生》公开课笔记 第七章 应用编排与管理:Job和DaemonSet
查看>>
阿里云《云原生》公开课笔记 第八章 应用配置管理
查看>>
阿里云《云原生》公开课笔记 第九章 应用存储和持久化数据卷:核心知识
查看>>