Swift: исчезновение двух изображений при смене кадра

Может ли кто-нибудь сказать мне, как я могу анимировать переход перекрестного растворения при изменении исходного кадра?

Мой код:

self.image = initialImage

UIView.transition(with: _self, duration: 10.0, options: [.transitionCrossDissolve, .allowUserInteraction], animations: {
     self.image = newImage
})

Также пробовал:

let transition = CATransition()
transition.duration = 10
transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
transition.type = kCATransitionFade
transition.delegate = self

self?.layer.add(transition, forKey: nil)

Изменение размера кадра во время выполнения анимации оставляет исходное изображение с начальным размером кадра, в то время как newImage адаптируется к обновленному кадру.

Спасибо.


person PAK    schedule 15.05.2018    source источник


Ответы (1)


Для более простого подхода создайте два экземпляра представления изображения и анимируйте альфа-канал первого из них, изменяя при этом кадр для них обоих.

let firstImageView = UIImageView(image: UIImage(named: "first"))
firstImageView.frame = CGRect(x: 100, y: 100, width: 200, height: 200)

let secondImageView = UIImageView(image: UIImage(named: "second"))
secondImageView.frame = firstImageView.frame

//the second image view should obscure the first one, that's why it's the first in the array
let imageViews = [secondImageView, firstImageView]

imageViews.forEach { view.addSubview($0) }

let newFrame = CGRect(x: 50, y: 50, width: 100, height: 100)

UIView.animate(withDuration: 10) {
    firstImageView.alpha = 0

    imageViews.forEach { $0.frame = newFrame }
}
person Tamás Sengel    schedule 15.05.2018
comment
Спасибо за ваш вклад! - person PAK; 15.05.2018