平移手势后将视图恢复到原始位置,快捷
我有一个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: () } }
这帮助了我一个类似的问题。