UIGestureRecognizer的发件人视图无法正常工作

时间:2012-08-09 05:41:51

标签: objective-c uiimageview uigesturerecognizer

根据此questionUIGestureRecognizer具有view属性,该属性引用手势附加到的视图。我在我的代码中使用了这个:

//Code for the 1st UIScrollView
UIImageView *bookCover = [[UIImageView alloc]initWithFrame:CGRectMake(50, 100, 145, 420)];
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]initWithTarget:self
action:@selector(downloadBookTapped:)];
[bookCover addGestureRecognizer:singleTap];

[bookCover release];
[singleTap release];

//Code for the second UIScrollView
UIImageView *fileCover = [[UIImageView alloc]initWithFrame:CGRectMake(50, 100, 145, 420)];
UITapGestureRecognizer *singleFileTap = [[UITapGestureRecognizer alloc]initWithTarget:self
action:@selector(downloadFileTapped:)];
[fileCover addGestureRecognizer:singleFileTap];

[fileCover release];
[singleFileTap release];

这是我使用view属性的地方:

- (void)downloadBookTapped:(UITapGestureRecognizer *)sender
{
  UIImageView *imgView = (UIImageView *)sender.view;

  CGRect rect = [imgView frame];

  UIImageView *images = [[UIImageView alloc]initWithFrame:rect];

  //rest of code here...
}

- (void)downloadFileTapped:(UITapGestureRecognizer *)sender
{
  UIImageView *imgView = (UIImageView *)sender.view;

  CGRect rect = [imgView frame];

  UIImageView *images = [[UIImageView alloc]initWithFrame:rect];

  //rest of code here...
}

这里的问题是我有两个scrollView,每个scrollview都有多本书。当我在第一个scrollView选择一本书时,images会正确显示。但是当我在第二个scrollView内选择一本书时,images显示不正确。谁能解释为什么会这样?感谢。

---附加信息---

两个scrollViews具有相同的宽度和高度。当然,差异在于安置。第一个scrollView位于(0,0),而第二个位于(0,350)。您可以将两者视为“货架”,第一个是顶部货架,第二个是底部货架。

要指定问题,请说我在第二个scrollView中选择了一本书。然后images将显示,就好像我在第一个scrollView中选择了一本书。意思是,images显示在第一个scrollView而不是第二个scrollView。

2 个答案:

答案 0 :(得分:1)

因为gestureRecognizer绑定到第一个UIImageView而不是第二个。

[bookCover addGestureRecognizer:singleTap];

为您的其他UIImageView执行此操作,您将获得所需的结果。

答案 1 :(得分:0)

我现在知道我做错了什么!我没有添加images作为scrollViews的子视图,而是这样做:

[self.view addSubView:images];

这就是为什么它一直出现在顶端。它应该是这样的:

[scrollBook addSubview:images];
[scrollFile addSubView:files];