千家信息网

iOS怎样实现不规则Button点击效果

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要介绍了iOS怎样实现不规则Button点击效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。遇到的问题功能1、2、3、4的
千家信息网最后更新 2025年11月08日iOS怎样实现不规则Button点击效果

这篇文章主要介绍了iOS怎样实现不规则Button点击效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

遇到的问题

功能1、2、3、4的按钮可以实现点击功能。但是在红色方框四角的位置,也会响应相应的点击事件。紫色方框内四角区域点击时,响应的方法是功能5,而不是对应的功能。

解决思路

期望的结果

寻找到合适的Button来处理点击事件

需要弄明白的问题

事件在如何传递的?怎么判断谁来处理当前事件?

事件是如何传递的?

  1. 当用户触摸实际屏幕时,会生成一个Touch Event,将此事件添加到UIApplication管理的事件队列之中。UIApplication从事件队列之中按顺序取出事件分发到视图去处理。当事件被发出以后,会从keyWindow开始,依次向上传递,包括Controller以及View,最后找到合适的视图来响应事件。

可以看出:当一个事件发生后,事件会从父控件传给子控件,也就是说由UIApplication -> UIWindow -> UIView -> initial view,以上就是事件的传递,也就是寻找最合适的view的过程。

涉及到两个方法:

func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?func point(inside point: CGPoint, with event: UIEvent?) -> Bool

当UIApplication发送事件到keyWindow时,会调用 hitTest来寻找最合适的视图处理事件。判断逻辑如下:

  1. 首先判断自身是否能够响应触摸事件(

  2. userInteractionEnabled==true
  3. hidden==true
  4. alpha<=0.01
  5. 不能响应触摸事件),若能响应则下一步,否则返回nil。如果可以响应触摸事件,调用pointInside来判断是否在显示区域内,如果不在其中,pointInside返回false,同时hitTest返回nil。如果 pointInside返回true,表示在当前的视图之中,然后倒序遍历该视图的子视图,重复上述步骤,直到某一视图可以响应,hitTest:返回该视图。如果执行完上述步骤以后,没有符合条件的视图响应事件,则返回视图本身,表示只有当前视图符合条件,能够处理该事件。

Q:为什么倒序遍历?A:因为在subViews数组中,最后添加的视图,在视图层级中处于最上方。

怎么判断谁来处理当前事件?

当知道的上面事件传递机制后,我们就能理清楚我们的Button处理事件的逻辑了:

1、自定义Button继承自系统的Button。

2、重写 point(inside point: CGPoint, with event: UIEvent?) -> Bool 方法。在其中判断当前事件是否需要自身处理。

判断点是否在自身button.imageView的frame范围内得到点击点在button.imageView中该点的颜色值如果得到的色值中alpha小于阀值,则返回false

感谢你能够认真阅读完这篇文章,希望小编分享的"iOS怎样实现不规则Button点击效果"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

事件 视图 处理 合适 功能 篇文章 之中 方法 不规则 效果 也就是 倒序 区域 同时 控件 方框 条件 步骤 逻辑 问题 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 四川移动通信网络技术有限公司 服务器远程管理员权限 数据库性能评测真的很重要么 芜湖皮皮鲁网络技术有限公司 传奇世界数据库添加法师宝宝 魔兽世界的服务器id 网络是网络安全手抄报 广东南云互联网科技 数据库加密技术不包括 蘑菇服务器被攻击 40个服务器安全加固小技巧 在数据库技术中dbms 网络安全防护最新方案 服务器主板怎么连接电脑 松江区电商软件开发承诺守信 工业网络技术怎么样 服务器管理员就业 按哪个键可以刷新数据库的显示 access数据库加密码 联想服务器进管理页面 我的世界神奇宝贝服务器作弊插件 企业服务器租赁需要多少钱 金山区营销软件开发有哪些 视频存储服务器怎么发布链接 ems 软件开发 加强网络安全技术保障能力 系统是win的服务器咋样做镜像 计算机网络安全与应用 关于网络安全周的重要讲话 我的世界服务器沙盒游戏
0