我想允许用户在其超级视图的有限区域内拖动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
}
}
}
我看到确实没有将视图拖到有限区域之外,但是当我尝试再次将它从最后一个有效位置拖出时没有任何反应。
我在这里缺少什么?
答案 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
}