2016-04-08 10 views
0

私はUIView(画像の赤い部分)を持っています。私はx軸でパンすることができます。私は元の位置に戻ってビューを返すことができますが、私はそれが軽い春に引っ張られているかのようにその位置に戻りたい、またはある種の減速で元の位置に戻って緩和する。パンのジェスチャーの後、元の位置に戻す

奇妙なことに、その位置にジャンプします。

これは私の関連するコードであり、画像が添付されて最大の位置に表示されます。

enter image description here

@IBAction func handlePan(recognizer:UIPanGestureRecognizer) { 

     if recognizer.state == UIGestureRecognizerState.Ended { 

      print(backgroundView.center.x) //120.0 
      print(backgroundView.center.y) //64.0 

      let xDivision = Double(backgroundView.center.x/120.0) 
      print(xDivision) 

      recognizer.view?.center = CGPointMake(120.0, 64.0) 

      self.view.frame = CGRectMake(backgroundView.center.x, 0, self.view.frame.width , self.view.frame.height) 

      UIView.animateWithDuration(xDivision, delay: 0.0, usingSpringWithDamping: 2.0, initialSpringVelocity: 2.0, options: UIViewAnimationOptions.CurveEaseIn, animations: { 

       self.view.center.x = 120.0 

       }, completion: { (true) in 

        print("Animation Complete") 
        print(self.backgroundView.center.x) 
      }) 



     } 

     let translation: CGPoint = recognizer.translationInView(self.view) 
     //recognizer.view?.center = CGPointMake((recognizer.view?.center.x)!, (recognizer.view?.center.y)! + translation.y) 
     recognizer.setTranslation(CGPointMake(0, 0), inView: self.view) 


     var center: CGPoint = (recognizer.view?.center)! 
     print(center.x) 
     center.x += translation.x 
     if center.x < 50.0 || center.x > 320.0 { 
      return 
     } 
     recognizer.view?.center = center 

    } 

私はそれを達成する方法上の任意のアイデア。このアニメーションの良い例はこのアプリです - http://rise.simplebots.co

ありがとうございました。

答えて

1

自動レイアウトを使用している場合は、フレームまたはセンターのプロパティを変更すると問題が発生する可能性があります。制約の定数を変更することについて考えましたか? Like:

@IBAction func handlePan(recognizer:UIPanGestureRecognizer) { 

    switch recognizer.state { 
    case .Began: 
     //do something 

    case .Changed: 
     let translation = recognizer.translationInView(self.view) 
     self.leftContraint.constant = self.leftContraint.constant + translation.x 
     recognizer.setTranslation(.zero, inView: self.view) 

    case .Ended: 
     UIView.animateWithDuration(1, 
      delay: 0, 
      options: .CurveEaseOut, 
      animations: { 
       self.leftContraint.constant = //your value 
       self.view.layoutIfNeeded() 
      }, 
      completion: nil) 

    default:() 
    } 
} 

これは私にも同様の問題をもたらしました。