使用UIPanGestureRecognizer在有限区域内拖动UIView

时间:2015-03-09 08:57:01

标签: swift drag uipangesturerecognizer

我想允许用户在其超级视图的有限区域内拖动UIView。尝试以下简单代码:

func handlePanForImage(recognizer: UIPanGestureRecognizer) {

    if let myView = recognizer.view {

        switch (recognizer.state) {

        case .Changed:

            let translation = recognizer.translationInView(self)

            if insideDraggableArea(myView.center) {                
                myView.center =  CGPoint(x:recognizer.view!.center.x + translation.x, y:recognizer.view!.center.y + translation.y)
                recognizer.setTranslation(CGPointZero, inView: self)
            }

        default:
            break
        }
    }
}

我看到确实没有将视图拖到有限区域之外,但是当我尝试再次将它从最后一个有效位置拖出时没有任何反应。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

正如在其他一些帖子中解释的那样,我首先需要计算新位置,然后检查新位置是否在边界内,并且只有在更新视图的坐标时才需要:

        let translation = recognizer.translationInView(self)
        let newPos = CGPoint(x:recognizer.view!.center.x + translation.x, y:recognizer.view!.center.y + translation.y)

        if insideDraggableArea(newPos) {                
            myView.center =  newPos
            recognizer.setTranslation(CGPointZero, inView: self)
        }

答案 1 :(得分:1)

这是一个非常简单的功能,只检查给定点是否在您定义的屏幕上的某个区域内:

static func insideDraggableArea(point : CGPoint) -> Bool {
    return point.x > 50 && point.x < 200 &&
           point.y > 20 && point.y < 400
}