iOS:如何在HitTest方法中获取触摸类型判断手写笔触摸?
判断手写笔触摸并自定义HitTest行为
你可以通过UITouch的type属性区分触摸类型,iOS 9及以上系统中,UITouchType枚举里的.stylus类型专门对应手写笔(如Apple Pencil)的触摸事件。
在hitTest(_:with:)方法中,从传入的UIEvent对象提取触摸集合,判断是否存在手写笔触摸即可:
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { // 先确认事件包含触摸对象 guard let touches = event?.allTouches else { return nil } // 检查是否有手写笔触摸 let isStylusTouch = touches.contains { $0.type == .stylus } // 按需求返回结果:手写笔触摸返回默认hitTest结果,否则返回nil return isStylusTouch ? super.hitTest(point, with: event) : nil }
注意事项
- 部署目标需设为iOS 9.0或更高版本,因为
.stylus类型是iOS 9开始引入的。 - 若事件包含多个触摸点(比如手指和手写笔同时触摸),上述代码会因存在手写笔触摸返回默认结果,符合你的需求。
- 如果需要进一步区分第一代/第二代Apple Pencil,可以借助
UITouch的force或pressure(iOS 10+)属性辅助判断,但基础类型判断已能满足当前场景。
内容的提问来源于stack exchange,提问作者Bartek Chyży
相关产品推荐
相关产品推荐

