Подход -1:
Установить animationImages
на imageView
, т. Е.
let imagesArray = [UIImage(named: "image"), UIImage(named: "image1"), UIImage(named: "image2")]
imageView.animationImages = imagesArray.compactMap({$0})
imageView.animationDuration = 2.0
imageView.startAnimating()
Подход-2:
Вы можете создать свою собственную анимацию, например,
let imagesArray = [UIImage(named: "image"), UIImage(named: "image1"), UIImage(named: "image2")]
Метод управления анимацией изображений,
func animateImage(at index: Int) {
if index < imagesArray.count {
self.imageView.image = self.imagesArray[index]
self.imageView.alpha = 0
UIView.animate(withDuration: 2.0, delay: 0.0, options: [.curveEaseInOut], animations: {
self.imageView.alpha = 1.0
}) { (completed) in
self.animateImage(at: index + 1)
}
} else {
self.animateImage(at: 0)
}
}
Инициируйте метод с помощью index 0
, то есть
self.animateImage(at: 0)
Edit-1:
Чтобы получить images
из server
перед их анимацией в imageView
,
func downloadImages() {
let imageUrls = [String]()
var imagesArray = [UIImage]()
let dispatchGroup = DispatchGroup()
dispatchGroup.notify(queue: DispatchQueue.main) {[weak self] in
self?.imageView.animationImages = imagesArray.compactMap({$0})
self?.imageView.animationDuration = 2.0
self?.imageView.startAnimating()
}
imageUrls.forEach { (imageUrl) in
if let url = URL(string: imageUrl) {
dispatchGroup.enter()
URLSession.shared.dataTask(with: url, completionHandler: { (data, urlResponse, error) in
if let data = data, let image = UIImage(data: data) {
imagesArray.append(image)
dispatchGroup.leave()
}
}).resume()
}
}
}