给定一个UIView的特定状态,我希望它在touchesBegan时作出响应,然后取消任何继续从该特定touchesBegan事件开始的touchesMoved/Ended。基本上,当我的UIView子类处于静止状态时,如果被触摸,我想移动一些其他的UIView...然后下次被触摸时,响应链可以正常响应touchesMoved/Ended...是的,我可以在touchesMoved/Ended中检查这个状态,但我想知道是否有一种方法可以在touch事件的中途停止它。
移除视图层级结构中的视图
这是一篇很老的帖子,没有令人信服的答案,所以我决定添加我的解决方法
使用Xcode 9、Swift 4和iOS 11进行工作时,这些解决方案不会影响触摸操作
self.resignFirstResponder()
self.touchesEnded(touches, with: event)
let superview = self.superview
self.removeFromSuperview()
superview?.addSubview(self)
Storyboard
视图进行测试。superview.subviews
数组中的位置。 let fakeTouch:Set<NSObject> = [UITouch()]
let event = UIEvent()
self.touchesEnded(fakeTouch, withEvent: event)
我没有尝试过,但我会做一个有根据的猜测。
第一个响应者是当前触摸事件的接收者。因此,停止作为第一个响应者应该可以阻止更多的触摸事件进入。一个新的触摸事件将设置一个新的第一个响应者。
[self resignFirstResponder];
==
进行比较。UITouch *anyTouch = [touches anyObject];
if (anyTouch != self.lastTouch)
return;
当然,这可以扩展到多个触摸。