如何在 iPad 上同时允许多个长按手势?

发布于 2024-12-22 11:18:18 字数 1019 浏览 2 评论 0原文

我目前有一些链接到 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无人接听 2024-12-29 11:18:18

在你的视图控制器中......

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {        
    return YES;
}

并且不要忘记

recognizer.delegate = self;

在创建每个手势时......

In your view controller...

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {        
    return YES;
}

And don't forget to

recognizer.delegate = self;

when creating each gesture...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文