【问题标题】:Begin drag and drop after long tap长按后开始拖放
【发布时间】:2014-10-09 13:02:04
【问题描述】:

我正在创建一个视图,在通过长按激活“编辑模式”后,可以通过拖放重新排列其子视图。

我将UILongPressGestureRecognizerUIPanGestureRecognizer 用于这两个手势识别器。

一切都很好,但我希望能够开始拖动我的子视图而无需再次点击我的视图(比如当你在跳板上重新排列你的图标时)。

有没有办法做这样的事情?

编辑:

我试过了:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    var res = false

    if ((gestureRecognizer == longTapGesture && otherGestureRecognizer == panGesture) || (gestureRecognizer == panGesture && otherGestureRecognizer == panGesture)) {
        res = true
        println("????")
    }
    return true
}

没有成功。

【问题讨论】:

    标签: ios swift drag-and-drop uigesturerecognizer


    【解决方案1】:

    首先,这两个手势识别器应该可以很好地协同工作。通常其中一个会取消另一个。为防止出现这种情况,您可以使用 UIGestureRecognizerDelegate 方法 gestureRecognizer: shouldRecognizeSimultaneouslyWithGestureRecognizer: 并为两个识别器返回 YES。

    之后,您需要有一个布尔属性来在长按发生之前锁定您的平移效果。 UILongPressGestureRecognizer 目标方法应该仅在此属性设置为 YES 时执行某些操作。当平移手势完成/重置时,请记住将此属性设置为 NO。

    【讨论】:

    • 这就是我的想法,但它不起作用我正在编辑我的帖子以放置代码示例。
    • 当我检测到长按事件时,我还将平移手势添加到视图中
    • 这很重要。呈现视图时添加平移手势。它应该始终启用,并且您决定根据您的布尔属性为您的视图设置动画。
    • 不确定,我的平移手势是使用正确的目标创建的,我只是在适当的时间调用 addGestureReconizer 和删除
    • 可能这就是它不起作用的原因,因为在您添加平移手势时,触摸已经开始。通常 touch begin 会启动一个手势识别器。让您的平移手势始终有效。但是用户长按之后开始做你的平移动画。要知道用户是否长按,你需要一个额外的布尔属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多