我的动画是在视图出现后启动的,我需要点击来阻止它,但是动画不会停止。
代码:
属性
private var isAnimating = true动画(每0.1秒显示新图像)
func animateImage() {
UIImageView.transition(with: self.imageView, duration: 0.1, options: .transitionCrossDissolve) {
self.imageView.setImage(imageUrl: self.imagesArray[self.nextImage])
} completion: { _ [weak self] in
if self.nextImage != self.imagesCount - 1 {
self.nextImage += 1
} else {
self.nextImage = 0
}
self.animateImage()
}
}UITapGestureRecognizer
let tap = UITapGestureRecognizer(target: self, action: #selector(tapOnImage))
self.addGestureRecognizer(tap)水龙头的行动
@objc func tapOnImage(sender: UITapGestureRecognizer) {
if isAnimating {
imageView.stopAnimating()
} else {
imageView.startAnimating()
}
isAnimating.toggle()
}发布于 2022-07-29 04:44:26
在完成处理程序中,再次调用self.animateImage()以形成一个循环。如果您在isAnimating上有条件地调用它,那么当isAnimating为false时,循环将“中断”:
completion: { _ [weak self] in
guard let `self` = self else { return }
if self.nextImage != self.imagesCount - 1 {
self.nextImage += 1
} else {
self.nextImage = 0
}
// notice this condition
if self.isAnimating {
self.animateImage()
}
}还要注意的是,imageView.startAnimating()开始使用imageView.animationImages动画,而不是使用UIImageView.animate创建的动画,这与UIView.animate是一样的。所以你只需要用单行
isAnimating.toggle()在tapOnImage中。
由于您似乎希望在isAnimating设置为true时重新启动动画,所以应该在其didSet中调用animateImage。
private var isAnimating = true {
didSet {
if isAnimating {
animateImage()
}
}
}https://stackoverflow.com/questions/73161631
复制相似问题