平移手势后将视图恢复到原始位置,快捷

我有一个UIView (图像中的红色),我可以在X轴上平移。 我可以将视图恢复到原来的位置,但是我想要返回到这个位置,就好像它被一个轻的弹簧拉住,或者以某种减速的方式放松回到原来的位置。

此刻它奇怪地跳回到那个位置。

这是我的相关代码,并附上图像以显示视图的最大位置。

在这里输入图像说明

 @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 } 

任何想法如何我可以实现这一点。 这个animation的一个很好的例子是这个应用程序 – http://rise.simplebots.co

谢谢。

如果您使用自动布局,更改框架或中心属性可能会导致问题。 你有没有想过只是改变约束的常量? 喜欢:

 @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: () } } 

这帮助了我一个类似的问题。