Uiview 如何附加发生在视图外部的点击事件以设置/取消该事件的动画

Uiview 如何附加发生在视图外部的点击事件以设置/取消该事件的动画,uiview,event-handling,Uiview,Event Handling,我有一个视图,比如说视图B位于另一个视图a的顶部。我想在视图B之外发生触摸点击时制作一些动画 到目前为止,我已将taptouch手势识别器连接到视图A。问题是视图A正在拦截tap事件,即使是在视图B上发生的事件,但它与视图A重叠 UITapGestureRecognizer * recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(animateViewB)]; recognizer.d

我有一个视图,比如说视图B位于另一个视图a的顶部。我想在视图B之外发生触摸点击时制作一些动画

到目前为止,我已将taptouch手势识别器连接到视图A。问题是视图A正在拦截tap事件,即使是在视图B上发生的事件,但它与视图A重叠

UITapGestureRecognizer * recognizer = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(animateViewB)];
recognizer.delegate = self;
[self.viewA addGestureRecognizer:recognizer];

单击视图B内部时,我应如何继续确保未将点击事件发送到视图A?如果我检查事件相对于视图B的位置,如果我检测到它在视图B内。如何确保所有事件都转发到视图B?

即使您正在触摸视图B,您的视图A仍拾取交互的原因是UIImageViews本机禁用了用户交互

如果要拦截UIImageView上的交互,必须设置:

imageView.userInteractionEnabled = YES;
如果将手势识别器添加到视图中,该视图将是唯一使用特定识别器的视图

最高级别的视图,即顶部启用用户交互的视图将接收您的触摸或手势。禁用用户交互的视图将不会接收任何触摸或手势事件


为了更好地理解视图层次结构,您应该阅读:

viewB是什么类型的视图?例如,如果是本机禁用交互的UIImageView,您可以尝试设置viewB.userInteractionEnabled=YES;我拥有的视图B是UIImageView,但我将添加一个滚动视图作为子视图。对于userInteractionEnabled,当单击视图B时,视图A没有拾取事件。iOS中关于事件传播的规则是什么?我对视图层次结构和应首先捕获事件的手势识别器感到困惑。