取消当前的长手势以拖动视图

  • 本文关键字:拖动 视图 取消 ios swift
  • 更新时间 :
  • 英文 :


我有controllerA,我在其中添加了一些UIView子类。此视图内部有一个long press gesture,因此,当您长时间按下它时,它将其委派给controllerA

现在,用户长时间按照该视图,我想通过pangeSture开始拖动它(在controllera中),我添加到Controllera。

唯一的问题是,该视图上的当前长按(在同类中)是从controllerA中消除PAN手势。(我只有在删除手指时才能将其拖动)

做:

view.userInteractionEnable=false 

长按启动 - 不会取消触摸,让我拖动,除非我删除手指,否则我找不到取消当前手势的方法。

如果我正确理解您,请使用此功能和返回所需的状态:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}

我发现了一个简单得多的策略。如果您想在长按时开始拖动元素,则不需要使用锅手势。

您可以简单地设置长按并将allowableMovement设置为大的东西,然后将动作转换为视图轴:

   let long:UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(self.long))
        long.allowableMovement=3000
        view.addGestureRecognizer(long)

然后,您将坐标转换为:

      let point = obj.location(in: view.superview)
   if(action == "began"){draggedPoint = point} //save starting point
    if(action == "changed")
    {
        view.frame.origin.x+=point.x-draggedPoint.x //translate to our view and drag
        view.frame.origin.y+=point.y-draggedPoint.y
        isDragging=true
    }

因此,由于运动是距离视图左角的距离,因此您只需在我们开始按下距离,然后测量距离,然后仅移动视图。

效果很好。

最新更新