Изменить супер вид UIView с анимацией в Swift - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть VideoView (это дочерний вид UIView).

По умолчанию он добавляется к UIView, который является маленьким представлением в углу экрана (я назвал его ParrentView1).

У меня есть кнопка для уменьшения VideoView. Эта кнопка выполняет действие, которое удаляет VideoView из ParentView1 и добавляет его в увеличенный вид (называемый ParrentView2).

Когда я выполняю приведенный ниже код, он работает, но анимация странная. Все, что мне нужно, это анимация уменьшения масштаба от ParrentView1 до ParrentView2. Вот мой код:

VideoView.removeFromSuperview()
ParrentView2.addSubview(VideoView)
UIView.animate(withDuration: 0.8, delay: 0,
               usingSpringWithDamping: 1,
               initialSpringVelocity: 1,
               options: .curveEaseOut,
               animations: {

                VideoView.frame = ParrentView2.bounds
}, completion: nil)

спасибо за помощь

1 Ответ

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

Вероятная причина в том, что при добавлении его в другое представление ему присваивается другой кадр. Решение состоит в том, чтобы убедиться, что анимация начинается в исходном месте. Что-то вроде:

CGRect originalRect = ParrentView2.convert(VideoView.frame, from:VideoView.superView);

VideoView.removeFromSuperview()
ParrentView2.addSubview(VideoView)
VideoView.frame = originalRect;
UIView.animate(withDuration: 0.8, delay: 0,
               usingSpringWithDamping: 1,
               initialSpringVelocity: 1,
               options: .curveEaseOut,
               animations: {

                VideoView.frame = ParrentView2.bounds
}, completion: nil)

Улучшение: обратите внимание, что в Swift принято начинать имена переменных со строчной буквы. Это сбивает с толку, когда они этого не делают.

...