【发布时间】:2013-10-08 05:10:02
【问题描述】:
我正在向屏幕添加几个 UIView 对象(例如 5 个),一个在另一个内部。例如,view5.superview = view4、view4.superview = view3、view3.superview=view2、view2.superview = view1。对于所有这些UIView,我设置了 uitapgesturerecognizer;对于 view1-4 我只是在回调中执行 NSLog(@"tap %@", self) ,而对于 view5 点击我设置以下内容:从层次结构中删除 view4,然后将相同的对象 view4' 放在层次结构的同一位置.该对象还包含 view5' 设置了 UITapGestureRecognizer (实际上,我用类似的部分替换了标记的一部分)。
然后我开始点击 view5。有时 view5 一直在捕捉它的点击,一切正常,但随后随机点击数次(每次这个数字不同),其中一个 view1-4 对象开始捕捉到这个点击,尽管我们仍在点击 view5。整个问题具有随机性——有时它发生在第 10 次启动时,有时发生在第二次启动时。有时错误的对象在第一次点击时开始捕捉点击。此外,当一切都出错时,我永远不知道什么物体会被点击。 view(n+1) 的框架被设置为例如框架 view(n) 的一半,而 view1 的框架 - 例如(0,0 320, 460)。
上面描述的所有 ui 对象的操作都是在主线程中进行的,我所说的一切都可以在 iOS 4.3 - 6.1 上完美运行,并带有更复杂的示例。但是 iOS7 让它成为了某种随机的地狱。
更新: 我创建了一个示例项目,以简化调试过程。没有点击添加/删除子视图操作。屏幕上只有 4 个视图,点击应用程序会记录被点击的视图。因此,您需要点击最小视图 (4)。如果您在日志中看到“tap 4 tap 4 tap 4…” - 这是一切正常时的情况,停止并再次运行,停止并再次运行,停止并再次运行,等等。并且在某些运行时(可能在 10 +成功运行)你不会在第一行看到“tap 4”,你会看到“tap 1”或“tap 2”或“tap 3”,它会继续这样 - 这些都是坏情况。
可以从这里下载示例项目:http://tech.octopod.com/test/BuggySample.zip(存档中只有 33 Kb)。
更新 2
我们已经向 Apple 发布了一个错误,当我们得到一些反馈时我会在这里发布。但是,任何好的解决方法都将不胜感激!
更新 3
由 Yuvrajsinh 提供的解决方案实际上正在处理示例项目。 不幸的是,它仍然无助于解决最初出现的主项目中出现的问题。现在的主要原因是,如果任何没有自我手势的视图放置在可点击的内容上,它下面的随机视图元素就会开始捕捉交互(而不是顶部有交互手势集的视图元素。 你有什么想法可以解决吗? 更新后的示例可以从这里下载:http://tech.octopod.com/test/BuggySample2.zip
【问题讨论】:
-
我也面临同样的问题。如果您得到解决方案,请在此处发布。我的问题是 UIPanGestureRecognizer
-
我在使用 UITapGestureRecognizer 时遇到了类似的问题。奇怪的是,如果我用两根手指点击——其中一个在我的自定义视图上,另一个在其他视图上——它会做它的事情应该做的!然而,这不是一个很好的解决方法。
-
向 Apple 提交雷达报告。
-
Moxy,你试过多次重启项目吗?我写了关于它 - “所以,你需要点击最小的视图(4)。如果你在日志中看到“点击 4 点击 4 点击 4...” - 这是一切正常的情况,停止并再次运行,停止并再次运行,停止并再次运行,等等。在某些运行中(可能在 10 次以上成功运行之后)您不会在第一行看到“tap 4”,您会看到“tap 1”或“tap 2”或“点击 3”,它会继续这样 - 这些是不好的情况。”
-
顺便说一下,我们已经向 Apple 高级支持提出了请求,他们建议我们提交错误报告。 1个月前向Apple发送了Bug报告,但仍然没有回复。如果收到任何回复,我将在此线程中发布一行。
标签: ios ios7 uigesturerecognizer gesture uitapgesturerecognizer