使用UIGestureRecognizer中断滚动/动画UIScrollView

时间:2011-04-27 22:09:59

标签: iphone objective-c ios uiscrollview uigesturerecognizer

我有一个UIScrollView和一个UITapGestureRecognizer,它们都是非常基本的,并且除了一个之外我还能以各种方式协同工作。 UIScrollView不使用任何缩放,UITapGestureRecognizer现在只是写入控制台。

UITapGestureRecognizer被点击时,我可以让UIScrollView写入控制台,无论是静止还是通过setContentOffset制作动画,但是当UIScrollView时我无法让它工作1}}因滑动而移动。当UIScrollView被滑动并且仍处于运动状态时,滑动后的第一次点按将停止移动,然后UITapGestureRecognizer仅拾取第二次点击。我希望第一次点击以阻止UIScrollView滚动,并通过UITapGestureRecognizer写入控制台。

我希望我的问题只是通过我对UIScrollViewUITapGestureRecognizer的了解,而且只有一个属性可以解决这个问题,但到目前为止还没有阅读量帮我解决了这个问题。关于这是否可行的任何想法?

修改:感谢您提出建议,请参阅下文

道歉,我认为我没有很好地解释自己。我意识到静止UIScrollView上的第一个动作是滑动(在我的例子中,它只是由UIScrollView btw处理,而不是手势识别器)。

问题出在滑动和释放后,如果在仍在运动时点击 (并且没有其他触摸正在进行中),则UITapGestureRecognizer无法接听相反,它仅由UIScrollView选取并停止UIScrollView移动。如果让它减速然后点击,这样可以正常工作。此外,如果由于动画而不是滑动而移动,则水龙头也能正常工作。

使用“UILongPressGestureRecognizer”时这是相同的,这是我想要理想使用的,但我想如果我不能使用它来使用它,我就没有机会!

2 个答案:

答案 0 :(得分:4)

听起来你需要实现

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

UITapGestureRecognizer的委托方法,并为您要解释与之同步的点按手势的YES返回UIGestureRecognizers

e.x。

// Somewhere in your code...
UIGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
tap.delegate = self;
[self.view addGestureRecognizer:tap];
[tap release];

// And the delegate method...
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
        return YES;
}

n.b。在决定您希望与哪个UIGestureRecognizer(s)同步时,您可能希望更具辨别力。该示例将与其他所有手势识别器一起使用。

答案 1 :(得分:0)

问题在于,当用户第一次点按滚动 UIScrollView时,这不是点击,而是滑动即可。只有当用户轻敲和释放手指几乎在同一位置时(无需将手指拖过屏幕),它才会被视为点击。

您可以采取的措施是:使用UIScrollView委托方法scrollViewWillBeginDragging然后您会知道用户何时点按并开始拖动滚动视图,并添加{{ 1}}用于那些真正的水龙头。