Возможно, вы пытаетесь просматривать изображения в режиме backColor
последовательно, каждую секунду. Я бы рекомендовал избегать используемого в настоящее время подхода, вместо этого вы можете сгруппировать изображения в массив. Пример:
var backColor = UIImageView()
let image1 = UIImage(named: "a.png")
let image2 = UIImage(named: "b.png")
let image3 = UIImage(named: "c.png")
let image4 = UIImage(named: "d.png")
let image5 = UIImage(named: "e.png")
let image6 = UIImage(named: "f.png")
let images = [image1, image2, image3, image4, image5, image6]
var currentImageIndex = 0
@objc func alterImage() {
backColor.image = images[currentImageIndex]
currentImageIndex = currentImageIndex == images.count - 1 ? 0 : currentImageIndex + 1
perform(#selector(alterImage), with: self, afterDelay: 1)
}
В этот момент при просмотре последнего изображения оно вернется к первому.
Примечание: если вы делаете это внутри UIViewController
, вы может потребоваться объявить images
как переменную lazy:
lazy var images: [UIImage?] = { [image1, image2, image3, image4, image5, image6] }()
Кроме того, чтобы показать, как это может быть сделано при текущем подходе (и снова я рекомендую избежать этого), это можно сделать как:
// set the first image by default:
backColor.image = image1
@objc func alterImage() {
backColor.image =
backColor.image == image1 ? image2 :
backColor.image == image2 ? image3 :
backColor.image == image3 ? image4 :
backColor.image == image4 ? image5 :
backColor.image == image5 ? image6 : image1
perform(#selector(alterImage), with: self, afterDelay: 1)
}