【发布时间】:2012-07-22 17:04:03
【问题描述】:
我有自定义 UIScrollView 子类,里面有一些内容视图。其中一些我有 UITapGestureRecognizer。当滚动视图不滚动时,一切正常。但是当它滚动内容视图时不会收到点击动作。在滚动视图滚动时通过子视图处理点击操作的最简单解决方案是什么?
详情:
MyScrollView 水平滚动。它包含很多内容视图(例如MyContentView)。每个MyContentView 的宽度约为MyScrollView 宽度的三分之一。所以现在大约有 3-4 个可见的 MyContentView 元素。 MyScrollView 的主要行为是 1)确保滚动后 MyContentView 元素之一将位于屏幕中心,2)如果用户点击它,滚动到 MyContentView 的中心。所以我希望得到的主要答案是如何在MyContentView 减速时“正确”实现对点击动作的处理。
我发现了一些相同的问题和答案,但没有一个让我满意。最好的方法是实现 UITapGestureRecogniser 委托的gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:。但在这种情况下,我有时(当我点击时,让 smaaaal 拖动并释放手指,所以点击是钢可识别的(我们称之为准点击))同时有点击和滚动事件,这对我来说会导致错误即使我开始点击时滚动视图没有滚动。当用户准点击时,我的应用程序尝试滚动到点击的MyContentView 元素,然后立即处理正常滚动。这似乎更可怕,因为在处理点击后开始执行一些其他功能(在正常滚动时它不能执行)。
我需要滚动视图等待足以确定它不是点击事件然后才进行滚动的解决方案。否则,如果点击事件已识别滚动,则不得发生。
【问题讨论】:
-
您能否更具体地说明它导致您遇到的错误?请描述预期结果和观察到的结果,以便我们找出行为不端的原因。
-
我已经按照你的要求编辑了我的问题。
-
很快,就没有办法了。 在
UIScrollView自身位置发生重大变化之前,您的UIScrollView子视图无法接收来自用户的任何交互。移动完成后,UIScrollView将点击事件传递给它自己的子视图,然后你可以捕捉它们。请找到更多信息here
标签: objective-c ios cocoa-touch uiscrollview uigesturerecognizer