Возврат вида в исходное положение после панорамирования, быстрое

У меня есть 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

    }

Любые идеи о том, как я могу этого достичь. Хорошим примером этой анимации является это приложение - http://rise.simplebots.co/

Благодарю.

1 ответ

Если вы используете автоматическую компоновку, изменение свойств рамки или центра может вызвать проблемы. Задумывались ли вы просто об изменении константы ограничения? Подобно:

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

Это помогло мне с подобной проблемой.

Другие вопросы по тегам