我有一个 UIView
与4个按钮上,另一个 UIView
上的按钮视图。最上面的视图包含一个 UIImageView
,上面有一个 UITapGestureRecognizer
。
我试图创建的行为是,当用户点击 UIImageView
时,它在屏幕右下角的小和动画变大之间切换。当它是大的时候,我希望底部视图上的按钮被禁用,当它是小的时候,在右下角,我希望触摸被传递到按钮,并为他们正常工作。我几乎在那里,但我不能得到的触摸通过的按钮,除非我禁用的 UserInteractions
的顶部视图。
我在我的 initWithFrame:
的顶部视图中有这样的内容:
// Add a gesture recognizer to the image view
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageTapped:)];
tapGestureRecognizer.cancelsTouchesInView = NO;
[imageView addGestureRecognizer:tapGestureRecognizer];
[tapGestureRecognizer release];
这是我的 imageTapped:
方法:
- (void) imageTapped:(UITapGestureRecognizer *) gestureRecognizer {
// Toggle between expanding and contracting the image
if (expanded) {
[self contractAnimated:YES];
expanded = NO;
gestureRecognizer.cancelsTouchesInView = NO;
self.userInteractionEnabled = NO;
self.exclusiveTouch = NO;
}
else {
[self expandAnimated:YES];
expanded = YES;
gestureRecognizer.cancelsTouchesInView = NO;
self.userInteractionEnabled = YES;
self.exclusiveTouch = YES;
}
}
使用上面的代码,当图像很大时,按钮是不活动的,当我触摸图像时,它会收缩,按钮变成活动的。然而,小图像不接受触摸,因此不会扩大。
如果我在这两种情况下设置 self.userInteractionEnabled = YES
,然后图像扩展和收缩时,触摸,但按钮从来没有接收触摸和行动,好像禁用。
是否有办法使图像在触摸时扩展和收缩,但是下面的按钮只有在图像处于收缩状态时才能接收触摸?我是不是做了什么蠢事,漏掉了什么显而易见的东西?
我为了让这东西起作用都快疯了这样我才会感激你的帮助,
戴夫
更新:
为了进一步测试,我覆盖了 touchesBegan:
和 touchesCancelled:
方法,并在包含 UIImageView 的视图上调用了它们的超级实现。对于上面的代码,从不调用 touchesCancelled:
,而总是调用 touchesBegan:
。
因此,看起来视图正在接触,它们只是没有传递给下面的视图。
更新
这是因为响应链的工作方式吗? 我的视图层次结构如下:
VC - View1
-View2
-imageView1 (has tapGestureRecogniser)
-imageView2
-View3
-button1
-button2
我认为操作系统首先做了一个点击测试,因为 View2在前面,所以应该得到所有的触摸,除非用户交互被设置为 NO,否则这些不会传递给 View3,在这种情况下 imageView1也被阻止接收触摸。这就是它的工作原理吗? 有没有办法让 View2通过它对 View3的接触?