因此,我遍历循环并创建包含UIViewUIImageView(以便可以有选择地显示任何给定的部分)。这些UIView都存储在UIScrollView中。

我在创建手势识别器的循环中将手势识别器添加到UIView

当我运行程序时,只有最初在UIScrollView中可见的项目才能识别其手势。如果我滚动到以前隐藏的项目然后点击它们,则什么也不会发生(永远不会识别或尝试做手势)。

初始化代码:

UITapGestureRecognizer* gestRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
  gestRec.delegate = self;

  [imageholder addGestureRecognizer:gestRec];

处理手势的代码:
- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer
{
 float count = [self._imageHolders count];
 NSLog(@"handling gesture: %f",count);
 while(count--){
  UIView* object = (UIView*) [self._imageHolders objectAtIndex:count];
 // NSLog(@"Whats going on: %@, %@, %b",object,gestureRecognizer.view, object == gestureRecognizer.view);
  if(object == gestureRecognizer.view){
   object.alpha = .1;
   count = 0;
  }
 // [object release];
 }
}

有任何想法吗?

----更新:

我探索了scrollviewUIView和手势识别器中的各种可用功能,并尝试弄乱了边界,以防某些情况被切断了……有趣的是,如果只有一项是部分可见的并且您移动了使其完全可见,只有最初可见的部分才能识别任何手势。

我对手势识别器在UIKit体系结构中的工作方式了解不足,无法理解此问题。带有手势的滚动视图的Apple示例似乎没有这个问题,但是我找不到任何真正的区别,只是我将自己的UIImageViews嵌套在自己的UIViews

最佳答案

我有一个类似的问题,发现这是由于将子视图添加到顶级视图,然后将该顶级视图添加到滚动视图引起的。顶层视图的大小必须与滚动视图的contentSize(而不是边界)的尺寸相同,否则,即使滚动到子视图,也不会将触摸事件传递给子视图。

关于objective-c - UITapGestureRecognizer仅适用于初始化时舞台上可见的项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3568035/

10-13 08:08