快速-动态更改UIImageView的图像

问题描述 投票:0回答:1

我具有正常的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")!,     
    ]

我尝试过:

 NSTimer(timeInterval: 0.5, target: self, selector: "ChangeImage", userInfo: nil, repeats: true)

但是我不知道如何反复遍历数组。

ios swift uiimageview uiimage
1个回答
1
投票

创建以下实例属性:

private let imageView = UIImageView()
private var imageTimer: Timer?
private 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")!,
]

然后启动计时器,并将其添加到视图控制器生命周期中某个地方的运行循环中(也许是viewDidLoad:]

private func startImageTimer() {

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

    // add to run loop
    RunLoop.main.add(imageTimer!, forMode: .common)

}

然后,您需要观察应用程序进入和退出后台的时间,以便您可以在应用程序不运行时终止计时器。像往常一样,罗布·纳皮尔(Rob Napier)很好地解释了为什么这是本文中的好主意(Is NSTimer expected to fire when app is backgrounded?)。

// add these observers, perhaps in viewDidLoad
NotificationCenter.default.addObserver(self, selector: #selector(appDidEnterBackgroundHandler), name: UIApplication.didEnterBackgroundNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(appWillEnterForegroundHandler), name: UIApplication.willEnterForegroundNotification, object: nil)

@objc private func appDidEnterBackgroundHandler() {

    if imageTimer != nil {
        imageTimer!.invalidate()
        imageTimer = nil
    }

}

@objc private func appWillEnterForegroundHandler() {
    startImageTimer()
}

并且,显然,images不必是实例属性(但是其他两个都需要)。您可以使用startImageTimer方法在本地存储图像。

© www.soinside.com 2019 - 2024. All rights reserved.