Похоже, вы используете анимацию сборки в анимации кадра для UIImageView. Это предназначено для простого просмотра изображений, таких как анимированный gif. На самом деле у него нет более сложной анимации. Что вы можете сделать, если вы хотите использовать эффекты перехода, чередуются между двумя видами изображений и используют методы анимации UIView для переключения между ними. Это просто делает кроссфейд, манипулируя альфа:
var images = [UIImage]()
var currentImageindex = 0
func animateImageViews() {
swap(&firstImageView, &secondImageView)
secondImageView.image = images[currentImageindex]
currentImageindex = (currentImageindex + 1) % images.count
UIView.animate(withDuration: 1, animations: {
self.firstImageView.alpha = 0
self.secondImageView.alpha = 1
}, completion: { _ in
self.animateImageViews()
})
}
Здесь детская площадка, которая показывает, как она работает. Вам нужно отбросить 2 изображения в папку ресурсов с именем 1.png и 2.png, чтобы она работала. Обратите внимание, что установка таких рамок представления - это ужасная практика программирования, я просто сделал это здесь для краткости. использовать построитель интерфейса и автозапуск в вашем фактическом коде.
import PlaygroundSupport
import UIKit
class Demo: UIViewController {
let button = UIButton()
var firstImageView = UIImageView()
var secondImageView = UIImageView()
var images = [UIImage]()
var currentImageindex = 0
override func viewDidLoad() {
view.addSubview(firstImageView)
view.addSubview(secondImageView)
images.append(UIImage(named: "1.png")!)
images.append(UIImage(named: "2.png")!)
firstImageView.image = images[0]
secondImageView.image = images[1]
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
firstImageView.frame = view.frame
secondImageView.frame = view.frame
}
override func viewDidAppear(_ animated: Bool) {
animateImageViews()
}
func animateImageViews() {
swap(&firstImageView, &secondImageView)
secondImageView.image = images[currentImageindex]
currentImageindex = (currentImageindex + 1) % images.count
UIView.animate(withDuration: 1, animations: {
self.firstImageView.alpha = 0
self.secondImageView.alpha = 1
}, completion: { _ in
self.animateImageViews()
})
}
}
let viewcontroller = Demo()
viewcontroller.view.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
PlaygroundPage.current.liveView = viewcontroller.view
спасибо за вашу помощь, я попробовал ваш ответ, может быть, я что-то не хватает в его применении, отредактировал мой вопрос – biggreentree
я буду обновлять мой ответ с playround. –
абсолютно здорово! эффект именно то, что я искал! Последний вопрос, в случае, если я хочу, чтобы в будущем было добавлено ручное удаление, вы предлагаете лучше использовать контроллер просмотра страницы? – biggreentree