Как остановить/приостановить анимацию ограничений автоопределения (в быстрой)?

Этот пост показывает, как можно оживить изменения ограничений автоопределения, что очень полезно.

Теперь мне также нужна возможность остановить/приостановить эту анимацию, когда пользователь нажимает кнопку так же, как нажатие паузы на видео. Мой случай использования буквально таков: Пользователь играет музыку, нажимая кнопку, которая также запускает анимацию фонового изображения, которая просто включает в себя переключение изображений плюс перевод каждого изображения из (x1, y1) в (x2, y2). Когда пользователь нажимает кнопку паузы, музыка приостанавливается, и я также хочу, чтобы анимация фонового изображения приостанавливалась, потому что для всех целей и задач эта функция похожа на воспроизведение видео.

Первый метод, который я пытался, делал что-то вроде

self.displayBackgroundImage.layer.removeAllAnimations()

В то время как это останавливает анимацию в порядке, она также перескакивает до конца анимации, что нежелательно. Я также пробовал что-то вроде этого другого сообщения, которое включает в себя запуск еще одной очень короткой анимации с этой опцией

options: UIViewAnimationOptions.BeginFromCurrentState,

но это не останавливает анимацию на ограничениях, или, по крайней мере, я не понял, как заставить ее работать. Один комментарий в первом сообщении, который я упомянул, отметил, что анимация ограничений выполняется совершенно отдельно от другой анимации, которая дает мне ощущение, что нужно, что-то связано с .layoutIfNeeded().

Как это можно сделать? Вот как я настраиваю анимацию ограничений, которая работает именно так, как я хочу:

// first transition the image and its size & position
UIView.transitionWithView(self.displayBackgroundImage,
                duration: imageCrossDissolveResolution,
                options: UIViewAnimationOptions.TransitionCrossDissolve,
                animations: {
                    self.displayBackgroundImage.image = backgroundImages[imageIndex].file
                    self.displayBackgroundImage.contentMode = UIViewContentMode.ScaleToFill
                    self.displayBackgroundConstraintLeft.constant = backgroundImages[imageIndex].x + constraintLeftRightOffset
                    self.displayBackgroundConstraintRight.constant = self.screenWidth - (backgroundImages[imageIndex].x + backgroundImages[imageIndex].width) + constraintLeftRightOffset
                    self.displayBackgroundConstraintTop.constant = backgroundImages[imageIndex].y
                    self.displayBackgroundConstraintBottom.constant = self.screenHeight - (backgroundImages[imageIndex].y + backgroundImages[imageIndex].height)
                },
                completion: { (finished: Bool) -> Void in

                // then pan the image
                UIView.animateWithDuration(imagePanningResolution,
                    delay: imagePanningDelay,
                    options: UIViewAnimationOptions.CurveEaseInOut,
                    animations: {
                        self.displayBackgroundConstraintLeft.constant = backgroundImages[imageIndex].xEnd + constraintLeftRightOffset
                        self.displayBackgroundConstraintRight.constant = self.screenWidth - (backgroundImages[imageIndex].xEnd + backgroundImages[imageIndex].width) + constraintLeftRightOffset
                        self.displayBackgroundConstraintTop.constant = backgroundImages[imageIndex].yEnd
                        self.displayBackgroundConstraintBottom.constant = self.screenHeight - (backgroundImages[imageIndex].yEnd + backgroundImages[imageIndex].height)
                        self.view.layoutIfNeeded()
                    },
                    completion: nil)})

Идея. Как только начинается такая анимация, существует ли способ определить значения констант ограничения в реальном времени? Если возможно, я могу начать новую анимацию, установив константы в их текущие значения, используя идею .BeginFromCurrentState?

Спасибо.

Ответы