У меня есть случай, когда кнопка подключения нажата и постоянно анимируется, пока VPN не подключится.Затем я хотел бы остановить анимацию и загрузить новый набор изображений и анимировать это только один раз.
@IBOutlet weak var vpnButton: UIImageView!
var premiumImages: [UIImage] = []
var loadingImages: [UIImage] = []
@objc private func vpnStatusDidChange(_ notification: Notification) {
let nevpnconn = notification.object as! NEVPNConnection
let status = nevpnconn.status
switch status {
case NEVPNStatus.connecting:
self.animateImages(imageView: self.vpnButton, images: loadingImages, duration: 1.0, isInfinite: true)
self.vpnButton.image = UIImage(named: "Red-1")
}
Метод, который заботится о анимации:
func animateImages(imageView: UIImageView, images: [UIImage], duration: Double, isInfinite: Bool=false) {
imageView.stopAnimating()
imageView.animationImages = images
imageView.animationDuration = duration
if !isInfinite {
imageView.animationRepeatCount = 1
} else {
imageView.animationRepeatCount = 0
}
imageView.startAnimating()
}
Так что всякий раз, когдаЯ называю это, это остановит любую существующую анимацию на месте и оживит ее новыми изображениями.
И как только VPN подключится:
case NEVPNStatus.connected:
self.vpnButton.highlightedImage = UIImage(named: "OrangePressed")
self.animateImages(imageView: self.vpnButton, images: premiumImages, duration: 0.25)
self.vpnButton.image = UIImage(named: "OrangePremium-3")
Только loadingImages
будет должным образом анимирован.Второй набор premiumImages
не анимирует и показывает только последний кадр.
Я подозреваю, что stopAnimating () занимает некоторое время, и в идеале мне нужен здесь обработчик завершения, чтобы знать, когда начинатьimageView.startAnimating()
.