2016-05-20 3 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行のみが画面上のボタンの最後の位置を覚えていて、そこから次の時間を移動するためにアプリを告げることを思ったが、...そのボタンをクリックして少し動こうとしたとき、ボタンが同じ方向に飛んでスクリーンから消えてしまったのはなぜですか?

答えて

1

transitionの値は、最初にジェスチャーを開始した場所からの値です。

ボタンの移動方法を見てください。更新されたそれぞれのcenterには、大きくて大きな番号transitionを追加し続けます。あなたがする必要があるのは、パンのジェスチャーが最初に認識されたときと同じように、最新のtransitioncenterに追加することです。

したがって、投稿コードのように翻訳をリセットするか、ジェスチャの状態が.Beganのときにボタンの元のcenterを保存して、翻訳を元の中心値に適用します。

+0

ありがとうございます。正確に私が探している答え。 –