Я создал последовательность изображений png для анимации через объект UIImage
(около 30 изображений png для создания анимации - 100 кб каждая)
Однако после просмотра документации Apple не лучший выбор для кэширования изображений через объект UIImage (слишком большой объем памяти):
https://developer.apple.com/documentation/uikit/uiimage#//apple_ref/occ/clm/UIImage/imageNamed:
После просмотра нескольких других сообщений SO лучший способ - создать новую папку группы ( "Анимация" ) и сохранить PNG в новой папке и вызвать их через contentsOfFile:
Я сделал все вышеперечисленное, сохранил изображения в новой группе и обновил свой код, но я все еще что-то пропустил (сбросив фатальную ошибку: неожиданно нашел нуль при развертывании необязательного значения)
Вот мой текущий код (используя UIImage):
func createImageArray(total: Int, imagePrefix: String) -> [UIImage]{
var imageArray: [UIImage] = []
for imageCount in 0..<total {
let imageName = "\(imagePrefix)-\(imageCount).png"
let image = UIImage(named: imageName)!
imageArray.append(image)
}
return imageArray
}
И вот мой обновленный код (с использованием contentOfFile):
func createImageArray(total: Int, imagePrefix: String) -> [UIImage]{
var imageArray: [UIImage] = []
for imageCount in 0..<total {
let imageName = "\(imagePrefix)-\(imageCount)" // updated
//let image = UIImage(named: imageName)!
let bundlePath = Bundle.main.path(forResource: imageName, ofType: "png")
let image = UIImage(contentsOfFile: bundlePath!)
imageArray.append(image!)
}
return imageArray
}
Вот остальная часть моего кода:
Я определяю переменные экземпляра моего ViewController:
var animation1: [UIImage] = []
var animation2: [UIImage] = []
var animation3: [UIImage] = []
Затем я создаю анимационный массив для каждой анимации:
func createImageArray(total: Int, imagePrefix: String) -> [UIImage]{
var imageArray: [UIImage] = []
for imageCount in 0..<total {
let imageName = "\(imagePrefix)-\(imageCount)" // updated
let image = UIImage(named: imageName)!
imageArray.append(image)
}
return imageArray
}
Затем я устанавливаю значения анимации:
func animate(imageView: UIImageView, images: [UIImage]){
imageView.animationImages = images
imageView.animationDuration = 1.5
imageView.animationRepeatCount = 1
imageView.startAnimating() }
animation1 = createImageArray(total: 28, imagePrefix: "ImageSet1")
animation2 = createImageArray(total: 53, imagePrefix: "ImageSet2")
animation3 = createImageArray(total: 25, imagePrefix: "ImageSet3")
И, наконец, вызовите функцию анимации
func showAnimation() {
UIView.animate(withDuration: 1, animations: {
animate(imageView: self.animationView, images: self.animation1)
}, completion: { (true) in
})
}
Спасибо за любую помощь:)