在我的项目中,我有一个主视图,其中添加了一个UITapGestureRecognizer
,在这个主视图中,我有一个子视图,它是一个自定义的UIControl
,我将其称为{{ 1}}。
UICustomButton
覆盖UICustomButton
的以下方法:
UIControl
我遇到的问题是,所有“点击触摸”都触及以下回调:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
pressAnimation()
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
releaseAnimation()
listener?.onClick(sender: self)
}
override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesCancelled(touches, with: event)
releaseAnimation()
}
touchesBegan
touchesCancelled
回调未被调用,有点被忽略,我也不知道为什么。
如何通过触摸操作来调用touchesEnded
而不是touchesEnded
?
一些事实:
touchesCancelled
,一切正常; UITapGestureRecognizer
并覆盖所有supers
方法,touches
也被称为= /; touchesCancelled
被称为:o。答案 0 :(得分:2)
这是连接了手势识别器的视图的正确行为。
UIGestureRecognizer
文档说:“如果手势识别器识别出其手势,则视图的其余触摸将被取消”:
https://developer.apple.com/documentation/uikit/uigesturerecognizer
属性cancelsTouchesInView
(默认为true
)确定识别手势后是否取消触摸:
https://developer.apple.com/documentation/uikit/uigesturerecognizer/1624218-cancelstouchesinview
由于敲击识别器无法识别长按和滑动,因此不会干扰它们。当识别出轻拍时,它仅进行干预。
如果将识别器的cancelsTouchesInView
属性设置为false
,则不应取消触摸,并且将像往常一样调用touchesEnded(_:with:)
方法。
您可以在代码中或在Interface Builder中设置该属性(如果通过在情节提要板中拖动手势来添加手势识别器)。