如何在 iPad 上同时允许多个长按手势?
我目前有一些链接到 UILabels 的可拖放图层。我有一个 LongPressRecognizer 来拾取标签上的长按,并通过拖动标签来移动图层。
我通过捕获识别器目标中的手势来实现这一点,如下所示:
- (void)handleDragging:(UILongPressGestureRecognizer *)gestureRecognizer
{
switch ([gestureRecognizer state])
{
case UIGestureRecognizerStateBegan:
[self startDragging:gestureRecognizer];
break;
case UIGestureRecognizerStateChanged:
[self doDrag:gestureRecognizer];
break;
case UIGestureRecognizerStateEnded:
case UIGestureRecognizerStateCancelled:
case UIGestureRecognizerStateFailed:
[self stopDragging:gestureRecognizer];
break;
default:
break;
}
}
但是,我希望用户在拖动一个标签时能够在另一个标签上执行额外的长按操作以拖动多个标签同时贴上标签。由于识别器当前接受 1 次触摸 (numberOfTouchesRequired = 1),因此它似乎无法拾取其他事件。但是,每次 iPad 上发生另一个触摸事件时,都会触发gestureRecognizerStateChanged 事件。然而,识别器上的 numberOfTouches 仍然显示单次触摸。
为每个标签提供自己的 LongPressRecognizer 是最佳解决方案,还是可以使用单个识别器做一些更优雅的事情?
I currently have a few drag-and-drop'able layers linked to UILabels. I have a LongPressRecognizer picking up long-presses on the labels, and moving the layers with the labels being dragged around.
I've implemented this by catching gestures in the recognizer's target like such:
- (void)handleDragging:(UILongPressGestureRecognizer *)gestureRecognizer
{
switch ([gestureRecognizer state])
{
case UIGestureRecognizerStateBegan:
[self startDragging:gestureRecognizer];
break;
case UIGestureRecognizerStateChanged:
[self doDrag:gestureRecognizer];
break;
case UIGestureRecognizerStateEnded:
case UIGestureRecognizerStateCancelled:
case UIGestureRecognizerStateFailed:
[self stopDragging:gestureRecognizer];
break;
default:
break;
}
}
However, I'd like to enable a user to, while they are dragging one label, have the ability to perform an additional long-press on another label to drag multiple labels simultaneously. As the recognizer currently accepts 1 touch (numberOfTouchesRequired = 1), it doesn't seem to be able to pick up additional events. However, the gestureRecognizerStateChanged event is fired every time another touch event occurs on the iPad. numberOfTouches on the recognizer still shows a single touch, however.
Is giving each label its own LongPressRecognizer the best solution, or is there something more elegant I can do with a single recognizer?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在你的视图控制器中......
并且不要忘记
在创建每个手势时......
In your view controller...
And don't forget to
when creating each gesture...