我有一个UIView
,上面有4个按钮,另外UIView
个在按钮视图的顶部.最上面的视图包含一个UIImageView
,上面有一个UITapGestureRecognizer
.
我试图创建的行为是,当用户点击UIImageView
时,它会在屏幕右下角的小屏幕和动画变大之间切换.当它很大时,我希望底部视图上的按钮被禁用,当它很小时,在右下角,我希望touch 通过按钮,使它们正常工作.我就快到了,但是除非我禁用俯视图的UserInteractions
,否则我无法让touch 通过按钮.
在我的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];
这是我的百分百方法:
- (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;
}
}
使用上面的代码,当图像较大时,按钮处于非活动状态,当我touch 图像时,图像会缩小,按钮变为活动状态.但是,小图像不会受到影响,因此不会扩展.
如果我在这两种情况下都设置为self.userInteractionEnabled = YES
,则图像在touch 时会扩展和收缩,但按钮永远不会接受touch 并表现为禁用状态.
有没有办法让图像在touch 时展开和收缩,但如果图像处于收缩状态,下面的按钮只能接受touch ?我是不是在做傻事,漏掉了什么明显的东西?
我简直要疯了,我想让它发挥作用,这样我们就会感激你的帮助,
戴夫
UPDATE:个
为了进一步测试,我覆盖了touchesBegan:
和touchesCancelled:
方法,并在包含UIImageView的视图上调用了它们的超级实现.使用上面的代码,touchesCancelled:
永远不会被调用,而touchesBegan:
总是被调用.
因此,视图似乎得到了润色,它们只是没有传递到下面的视图.
UPDATE个
这是因为响应器链的工作方式吗?我的视图层次 struct 如下所示:
VC - View1
-View2
-imageView1 (has tapGestureRecogniser)
-imageView2
-View3
-button1
-button2
我认为操作系统首先会做一个hittest,因为说View2在前面,所以应该得到所有的touch ,这些永远不会传递给View3,除非View2的userInteraction设置为no,在这种情况下,imageView1也会被阻止接收touch .这是它的工作方式吗?有没有办法让View2通过它对View3的触控?