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

标签 objective-c ios uigesturerecognizer

因此,我遍历一个循环并创建 UIView包含UIImageView的s s(这样我就可以有选择地显示任何给定的部分)。这些UIView s 都存储在一个 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 中的工作原理架构来理解这个问题。带有手势的 ScrollView 的 Apple 示例似乎没有这个问题,但我找不到任何真正的区别,除了我正在嵌套我的 UIImageViews。自己内UIViews

最佳答案

我有一个类似的问题,发现它是由将 subview 添加到顶级 View 然后将该顶级 View 添加到 ScrollView 引起的。顶级 View 的大小必须与 ScrollView 的 contentSize(不是边界)相同,否则它不会将触摸事件传递给它的 subview ,即使它们已经滚动到 View 中。

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

相关文章:

swift - 当我调用 set LeftBarButtonItem 时,类似 "Screen Edge Pan Gesutre Recognizer"的东西无法工作

ios - 手势触发UIScrollView subview 异常

iphone - 使 UIView 全屏显示的问题

iphone - SectionHeader 打开/关闭动画

ios - 如何在 Xcode 项目中将 Font Awesome 与 Objective-C 或 Swift 集成和使用?

objective-c - 如何使用 Cocoa 应用程序读取 Safari Cookie?

iphone - 找不到 Google 任务 API

ios - 当应用程序未在 ios 7 中运行时如何更新应用程序角标(Badge)编号?

listview - Flutter(Dart):突出显示或选择onLongPress事件中的小部件(平铺或任何元素)

ios - 创建 MonoGame.Framework.iOS.dll