首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止UIImageView.transition

停止UIImageView.transition
EN

Stack Overflow用户
提问于 2022-07-29 04:25:44
回答 1查看 28关注 0票数 1

我的动画是在视图出现后启动的,我需要点击来阻止它,但是动画不会停止。

代码:

属性

代码语言:javascript
复制
private var isAnimating = true

动画(每0.1秒显示新图像)

代码语言:javascript
复制
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

代码语言:javascript
复制
let tap = UITapGestureRecognizer(target: self, action: #selector(tapOnImage))
self.addGestureRecognizer(tap)

水龙头的行动

代码语言:javascript
复制
@objc func tapOnImage(sender: UITapGestureRecognizer) {
        if isAnimating {
            imageView.stopAnimating()
        } else {
            imageView.startAnimating()
        }
        isAnimating.toggle()
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-29 04:44:26

在完成处理程序中,再次调用self.animateImage()以形成一个循环。如果您在isAnimating上有条件地调用它,那么当isAnimating为false时,循环将“中断”:

代码语言:javascript
复制
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是一样的。所以你只需要用单行

代码语言:javascript
复制
isAnimating.toggle()

tapOnImage中。

由于您似乎希望在isAnimating设置为true时重新启动动画,所以应该在其didSet中调用animateImage

代码语言:javascript
复制
private var isAnimating = true {
    didSet {
        if isAnimating {
            animateImage()
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73161631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档