Swift - 动态更改 UIImageView 的图像

Chr*_*ris 1 uiimageview uiimage ios swift

我有一张普通图像UIImage和一张list图像。我的目标是每隔几秒图像就会自动改变一次,并通过我的imageList.

这是我的清单:

let images: [UIImage] = [
        UIImage(named: "avocadoImage")!,
        UIImage(named: "beerImage")!,
        UIImage(named: "bikeImage")!,
        UIImage(named: "christmasImage")!,
        UIImage(named: "dressImage")!,
        UIImage(named: "giftImage")!,
        UIImage(named: "goalImage")!,
        UIImage(named: "rollerImage")!,
        UIImage(named: "shirtImage")!,
        UIImage(named: "shoeImage")!,
        UIImage(named: "travelImage")!,     
    ]
Run Code Online (Sandbox Code Playgroud)

我试过这个:

 NSTimer(timeInterval: 0.5, target: self, selector: "ChangeImage", userInfo: nil, repeats: true)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何一遍又一遍地循环我的数组。

bso*_*sod 5

创建以下实例属性:

private let imageView = UIImageView()
private var imageTimer: Timer?
private let images = [
    UIImage(named: "avocadoImage"),
    UIImage(named: "beerImage"),
    UIImage(named: "bikeImage"),
    UIImage(named: "christmasImage"),
    UIImage(named: "dressImage"),
    UIImage(named: "giftImage"),
    UIImage(named: "goalImage"),
    UIImage(named: "rollerImage"),
    UIImage(named: "shirtImage"),
    UIImage(named: "shoeImage"),
    UIImage(named: "travelImage"),
]
Run Code Online (Sandbox Code Playgroud)

然后启动计时器并将其添加到运行循环中(可能viewDidLoad):

private func startImageTimer() {
    imageTimer = Timer(fire: Date(), interval: 5, repeats: true) { (timer) in
        imageView.image = images.randomElement()
    }

    RunLoop.main.add(imageTimer!, forMode: .common)
}
Run Code Online (Sandbox Code Playgroud)

然后,您需要观察应用程序何时进入和退出后台,以便可以切换计时器。添加这些观察者(可能viewDidLoad):

NotificationCenter.default.addObserver(self, selector: #selector(backgroundHandler), name: UIApplication.didEnterBackgroundNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(foregroundHandler), name: UIApplication.willEnterForegroundNotification, object: nil)

@objc private func backgroundHandler() {
    imageTimer?.invalidate()
    imageTimer = nil
}

@objc private func foregroundHandler() {
    startImageTimer()
}
Run Code Online (Sandbox Code Playgroud)