【问题标题】:UITapGestureRecognizer in UIScrollView subviewUIScrollView 子视图中的 UITapGestureRecognizer
【发布时间】:2011-03-19 18:11:42
【问题描述】:

我正在尝试在 imageView 中使用单击识别器(这也是一个 scrollView 子项)。 在 Interface Builder 中,我只创建并引用了 scrollView。 可以滚动,但无法识别单击事件(未记录任何内容)。 代码如下:

- (void)loadView {
[super loadView];

UIImage *myImage = [UIImage imageNamed:@"img1.jpg"];
imageView = [[UIImageView alloc] initWithImage:myImage];

[myImage release];

// add gesture recognizers to the image view
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];

[imageView addGestureRecognizer:singleTap];

[singleTap release];

[imageScrollView setContentSize:CGSizeMake(imageView.frame.size.width, imageView.frame.size.height)];

[imageScrollView addSubview:imageView]; }

- (void)handleSingleTap:(UIGestureRecognizer *)gestureRecognizer {
// single tap handling
NSLog(@"sinlgeTap called"); }

我已经环顾了几个小时并尝试了很多东西。也许看看其他人可以提供更多帮助。 谢谢。

【问题讨论】:

  • 为 imageView 启用 userInteraction,将触发 singleTap...但滚动不再起作用。
  • 有没有办法让滚动功能​​和手势识别器一起工作?

标签: objective-c uiscrollview uiimageview uigesturerecognizer


【解决方案1】:

我已经启用了 imageView 的 userInteraction 和 scrollView 的 canCancelContentTouches 选项:

[imageScrollView setCanCancelContentTouches:YES];
[imageView setUserInteractionEnabled:YES];

现在可以了。

【讨论】:

  • 你为什么要[imageScrollView setCanCancelContentTouches:YES]?同样在你有一个图像的情况下,如果有多个图像怎么办,你在 handleSingleTap 中有什么代码来确定点击事件发生在哪个图像上
  • UIGestureRecognizer 将视图作为属性。所以你可以只做类似 UIImageView* thisView = UIGestureRecognizer.view 的事情,你也可以转换 UIImageView,不确定这是否是必要的 UIImageView* thisView = (UIImageView*) UIGestureRecognizer.view
  • 是的,@Yogesh,您只需要使用 [imageView setUserInteractionEnabled:YES] 即可。
猜你喜欢
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多