UIGestureRecognizer接收触摸,但也转发给UIControl

你会如何让一个UIViewUIGestureRecognizer接收一个触摸事件,但也要确保另一个底层/覆盖UIView也接收到这个非常相同的触摸事件?

可以说我有以下的看法 – hierachie: 查看hierachie涂鸦

视图A(蓝色)和B(红色)都是同一个超级视图(灰色)的子视图。 换句话说,他们都是兄弟姐妹,顺序决定哪一个涵盖另一个。

选项1:视图B(红色)有一个常规的UIButton作为其子视图。 选项2:视图A(蓝色)有一个常规的UIButton作为子视图。

鉴于解释的select1:视图A(蓝色)有一个UITapGestureRecognizer (或甚至更多,其他UIGestureRecognizers)附加。 什么是最优雅的方法来确保UIButton确实能够接触到它的所有区域,而且A(蓝色)视图接受了UITapGestureRecognizer触摸?

如果可能的话,解决scheme不应该涉及扩展UIButton类,并手动转发button本身的任何事件。 想象一下,视图B将包含更多的控件,而不仅仅是一个button。 所有这些控件应该以某种方式允许视图A在其UIGestureRecognizer上接收触摸。

我确实提供了两个选项,因为我不关心那些视图(A或B)中的哪一个先到达,只要两者都接收到触摸即可。

到目前为止,我所有的做法都突然传到了死胡同里。 也许一个自定义响应者链将是一个很好的解决scheme? 我一直认为在整个UIKit / UIEvent / UIResponder堆栈中必须有一个优雅的解决scheme。

你有尝试过吗?

cancelsTouchesInView一个布尔值,影响识别手势时是否将触摸传递到视图。

 @property(nonatomic) BOOL cancelsTouchesInView