UITapGestureRecognizer仅适用于初始化阶段可见的项目

mic*_*ael 2 objective-c uigesturerecognizer ios

所以,我遍历一个循环并创建UIView包含UIImageViews的s(这样我可以有选择地显示任何给定的部分).这些UIView都存储在一个UIScrollView.

UIView在我创建它们的循环中为s 添加了手势识别器.

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

初始化代码:

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

  [imageholder addGestureRecognizer:gestRec];
Run Code Online (Sandbox Code Playgroud)

处理手势的代码:

- (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];
 }
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

----更新:

我已经探索了各种可用的功能scrollview,UIView并且手势识别器已经尝试弄乱边界,以防万一被切断的方式......有趣的是,如果有一个项目只是部分可见并且你移动它因此它完全可见,只有最初可见的部分才会识别任何手势.

我不太了解手势识别器如何在UIKit架构内工作以理解这个问题.带有手势的滚动视图的Apple示例似乎没有这个问题,但我找不到任何真正的差异,除了我UIImageViews在自己的内部嵌套UIViews

小智 5

我有一个类似的问题,发现它是由于将子视图添加到顶级视图然后将该顶级视图添加到滚动视图引起的.顶级视图的大小必须与scroll-view的contentSize(不是边界)相同,否则即使它们已滚动到视图中也不会将触摸事件传递给其子视图.