我有一个UIScrollView
和一个UITapGestureRecognizer
,它们都是非常基本的,并且除了一个之外我还能以各种方式协同工作。 UIScrollView
不使用任何缩放,UITapGestureRecognizer
现在只是写入控制台。
当UITapGestureRecognizer
被点击时,我可以让UIScrollView
写入控制台,无论是静止还是通过setContentOffset
制作动画,但是当UIScrollView
时我无法让它工作1}}因滑动而移动。当UIScrollView
被滑动并且仍处于运动状态时,滑动后的第一次点按将停止移动,然后UITapGestureRecognizer
仅拾取第二次点击。我希望第一次点击以阻止UIScrollView
滚动,并通过UITapGestureRecognizer
写入控制台。
我希望我的问题只是通过我对UIScrollView
或UITapGestureRecognizer
的了解,而且只有一个属性可以解决这个问题,但到目前为止还没有阅读量帮我解决了这个问题。关于这是否可行的任何想法?
修改:感谢您提出建议,请参阅下文
道歉,我认为我没有很好地解释自己。我意识到静止UIScrollView
上的第一个动作是滑动(在我的例子中,它只是由UIScrollView
btw处理,而不是手势识别器)。
问题出在滑动和释放后,如果在仍在运动时点击 (并且没有其他触摸正在进行中),则UITapGestureRecognizer
无法接听相反,它仅由UIScrollView
选取并停止UIScrollView
移动。如果让它减速然后点击,这样可以正常工作。此外,如果由于动画而不是滑动而移动,则水龙头也能正常工作。
使用“UILongPressGestureRecognizer”时这是相同的,这是我想要理想使用的,但我想如果我不能使用它来使用它,我就没有机会!
答案 0 :(得分:4)
听起来你需要实现
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}}用于那些真正的水龙头。