2016-05-20 4 views
0

Мой код:Пан жест без setTranslation странного поведения

@IBAction func handlePan(gesture: UIPanGestureRecognizer) { 
    let transition = gesture.translationInView(self.view) 
    switch gesture.state{ 
    case .Changed: 
     if let view = gesture.view { 
      view.center = CGPoint(x: view.center.x + transition.x, y: view.center.y + transition.y) 
     } 
     gesture.setTranslation(CGPointZero, inView: self.view) 

    default:break 
    } 
} 

Так что я могу перетащить большую кнопку на экране вокруг. Все работает, пока я не прокомментирую gesture.setTranslation(CGPointZero, inView: self.view).

Я думал, что одна строка кода только говорит приложение, чтобы помнить последнюю позицию кнопки на экране и перейти оттуда в следующий раз, но ...

Тогда я снова запустил проект на тренажере, когда я нажал на эту кнопку и попытался немного переместиться, кнопка просто полетела в том же направлении и исчезла с экрана, почему?

ответ

1

По мере того как вы перемещаетесь, значение transition начинается с того места, где вы впервые начали жест.

Посмотрите, как вы двигаете кнопку. Вы просто добавляете больше и больше transition к каждому обновленному center. Что вам нужно сделать, это добавить последние transition в center, как это было, когда жест панорамы был впервые распознан.

Так что либо сбросьте перевод (например, в вашем опубликованном коде), либо сохраните оригинал center кнопки, когда состояние жестов .Began и примените перевод к исходному значению центра.

+0

спасибо. Именно ответ я ищу. –