Анимированное преобразование только для суперпредставления - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь анимировать масштаб родительского outerView, но оставляю дочерний innerView с его размером, чтобы преобразование родительского представления просто обрезало его во время анимации.По некоторым причинам, инвертированное преобразование масштабирует дочернее представление к большему размеру.

Без инвертированного преобразования родительское и дочернее преобразования одинаково.

    @IBAction func transformAction(_ sender: Any) {
    let animation = UIViewPropertyAnimator(duration: 5, curve: .linear) {
        self.outerView.transform = self.outerView.transform.scaledBy(x: 1, y: 0.1)
        self.innerView.transform = self.outerView.transform.inverted()
    }

    animation.addCompletion { _ in
        self.outerView.transform = CGAffineTransform.identity
        self.innerView.transform = CGAffineTransform.identity
    }

    animation.startAnimation()
}

Layput of views

enter image description here

1 Ответ

0 голосов
/ 04 октября 2018

Создайте innerView и outerView братьев и сестер в parentView, где, конечно, innerView перекрывается outerView.

Затем анимируйте transform из outerView, как вы уже делаете.

Наконец, также анимируйте высоту parentView.(Убедитесь, что parentView.clipsToBounds равно true.)

(Выше предполагается, что outerView имеет содержимое, которое необходимо сжимать по вертикали. Конечно, если такого содержимого нет, вы ненужен parentView и может просто анимировать высоту outerView.)

Кстати, конечный результат вашей анимации действительно имеет innerView назад к исходной высоте.Но вы не видите этого в анимации из-за outerView отсечения.Во время анимации трансформация портится.

...