2015-03-09 3 views
2

Я хочу разрешить пользователю перетаскивать UIView внутри ограниченной области его супер-просмотра. Попытка следующего простого кода:Использовать 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

Как объясняет в некоторых других должностях, мне нужно сначала вычислить новое место, а затем проверить, если новое место находится внутри границ, и только если это обновление координат вида по:

 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) 
     } 
+0

Это работает для меня. –

1

Это очень простая функция, которая просто проверяет, находится ли данная точка внутри какой-либо области на экране, который вы определяете:

static func insideDraggableArea(point : CGPoint) -> Bool { 
    return point.x > 50 && point.x < 200 && 
      point.y > 20 && point.y < 400 
} 
Смежные вопросы