如果你已经能写界面、能调布局,但一遇到「滑动冲突」「点击穿透」「自定义手势」就靠搜索和试错硬凑,这门课解决的就是这一类问题。它不讲 UI 基础控件怎么摆,而是专门拆触摸事件的分发流程和手势识别机制——也就是用户手指按下去到界面作出反应之间,系统到底做了什么。

它对应的工作场景

日常开发里几个高频麻烦,基本都落在课程范围内:列表横滑和页面竖滑互相抢事件;子视图的点击被父容器拦截;自定义组件需要支持双击、长按、拖拽,但用系统现成手势总觉得不跟手;做动效时想根据手指移动速度决定惯性滑动距离,却不知道该从哪个回调里取数据。这些问题不解决,功能也能上线,但手感会差一截,返工往往发生在测试提了 bug 之后。

课程把触摸事件当作一条链路来讲:事件从哪里产生、如何在视图层级里传递、谁有权决定消费还是放行。理解链路之后,上面那些现象就不再是玄学,而是可以推断和验证的结果。

学完能独立做什么

  • 给一个嵌套滚动的页面排查滑动冲突,判断该在父级还是子级做拦截,并写出对应处理。
  • 实现一个自定义手势控件,支持多指缩放或旋转,并控制好识别失败时的回退行为。
  • 让按钮或卡片的点击区域、按压反馈符合预期,处理快速连点、滑动中途取消等边界情况。
  • 把触摸数据接进动画,做出跟随手指、带速度惯性的交互效果,而不是只播一段固定动画。

这里说的「能独立做」,指的是遇到新问题你能定位到事件传递的哪一环出错,而不是背下某段能跑通的代码。后者换个布局就失效,前者才是这门课想留下的东西。

资料适合什么基础

需要你已经写过至少一个完整的界面模块,知道视图层级和坐标系是怎么回事,能看懂常规的回调与代理写法。完全没接触过事件回调的新手,建议先补上基础控件的使用,再来听分发流程会更顺。

反过来,如果你做 UI 设计或产品,想弄清楚「为什么这个手势实现不了、代价在哪」,也可以看,但重点建议放在概念和限制条件的部分,代码细节可以跳过。课程里的案例是围绕真实交互问题展开的,不是纯 API 罗列,这一点对非开发角色同样有参考价值。

怎么用这份资料

建议按「先建立模型,再动手改」的顺序推进。第一遍只求弄懂事件从上到下、再从下到上走了一遍什么流程,遇到代码先不逐行抠。第二遍挑一个你手上正在做的页面,把里面的滑动或点击问题代进去,边看边改,改完记录下拦截点放在哪一层、为什么。第三遍再回头看多指手势和识别器之间的优先级关系,这部分最容易记混,靠一次阅读很难吃透。

不建议一口气刷完。触摸事件的知识点不多,但每一条都和具体布局强相关,隔一段时间在不同项目里验证一次,比连着看完效果更好。如果你只是想临时解决某个冲突,也可以直接跳到对应章节,但事后最好回头把分发流程补上,否则下次还是会卡住。

课程目录

第一章 UI进阶知识点精讲-触摸事件及手势 UI进阶知识点精讲-触摸事件及手势 04-iOS中三大事件介绍 05-触摸事件的四个方法及NSSet 06-单点触摸案例 07-单点触摸01 08-单点触摸案例02 09-多点触摸案例 10-控件不能交互的几种情况 11-hitTest方法及响应者链条 13-轻敲手势 14-长按手势 15-轻扫手势 16-平移手势 17-缩放手势 18-旋转手势 19-6种手势的小结及手势冲突问题