iOS:两个手势,一个目标 – 行动

我正在实施消息应用程序复制消息function。

您可以双击或长按消息来复制它。

我怎么做?

我正在考虑添加两个手势识别器的视图,一个UITapGestureRecognizernumberOfTapsRequired设置为2 )和一个UILongPressGestureRecognizer 。 他们都会有相同的目标和行动。

然后,我想为他们每个人,我打电话requireGestureRecognizerToFail:传递另一个手势识别器。

我的想法是否正确? 有什么我失踪,还是有更好的方法来做到这一点?

只需将手势添加到您的视图(易于编程),并将select器设置为所需的方法。 但是,由于您没有提供任何代码或暗示,您在尝试解决您的问题之前,可能会得到一些推回。 我也是新来的,但是由于这些原因,我看到了一些问题。

正如你所说,双击和长按复制消息。 所以他们两个正在使用相同的行动。 所以我觉得你可以用同样的方法来做。

你可以在UIGestureRecognizerDelegate中试试这个方法

gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

参考这个更多的细节: https : //developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizerDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIGestureRecognizerDelegate/gestureRecognizer : shouldRecognizeSimultaneouslyWithGestureRecognizer :

这有助于一次识别多个手势识别器。

是的,如你所说,创build两个手势识别器(一个长按和一个双击)并将它们添加到相同的视图。

不要致电requireGestureRecognizerToFail:因为长按和双击手势在默认情况下会一起玩。

你可以给他们两个相同的目标和行动,但每个手势需要不同的逻辑来确定你是否应该显示复制菜单。

 - (void)messageCopyMenuShowAction:(UILongPressGestureRecognizer *)gestureRecognizer { BOOL doubleTap = (gestureRecognizer.numberOfTapsRequired == 2); if ((doubleTap && gestureRecognizer.state == UIGestureRecognizerStateEnded) || // double-tap (!doubleTap && gestureRecognizer.state == UIGestureRecognizerStateBegan)) { // long-press // Show copy menu. } }