因此,我通过循环迭代并创建 UIViews包含 UIImageViewS(以便我可以选择性地显示任何给定的部分)。这些 UIViews都存储在一个 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];
 }
}

有任何想法吗?

- - 更新 :

我已经探索了各种可用功能 scrollview, UIView 手势识别器,并尝试将界限弄乱,以防万一要切断了这种方式……有趣的是,如果只有一部分仅部分可见并且您将其移开,以使其完全可见,那么只有最初可见的部分才能识别任何手势。

我对手势识别器的工作方式不太了解 UIKit 了解这个问题的架构。带手势的卷轴的苹果示例似乎没有这个问题,但是我找不到任何真正的区别,除了我在筑巢 UIImageViews 在他们自己的内部 UIViews

有帮助吗?

解决方案

我遇到了类似的问题,发现它是由将子视图添加到顶级视图中,然后将顶级视图添加到滚动视图中引起的。顶级视图必须大小与滚动视图的内容大小(不是界限)相同的尺寸,否则即使它们滚动到视图时,它也不会将触摸事件传递给其子视图。

其他提示

尝试设置 cancelsTouchesInView 属性为否。

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

  [imageholder addGestureRecognizer:gestRec];
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top