0

I have a case of such a want to do so after refresh a couple of seconds were loaded with shimmer and finished animation. my code starAnimatiom :

func startAnimation() {
        for animateView in getSubViewsForAnimate() {
            animateView.clipsToBounds = true
            let gradientLayer = CAGradientLayer()
            gradientLayer.colors = [UIColor.clear.cgColor, UIColor.white.withAlphaComponent(0.8).cgColor, UIColor.clear.cgColor]
            gradientLayer.startPoint = CGPoint(x: 0.7, y: 1.0)
            gradientLayer.endPoint = CGPoint(x: 0.0, y: 0.8)
            gradientLayer.frame = animateView.bounds
            animateView.layer.mask = gradientLayer

            let animation = CABasicAnimation(keyPath: "transform.translation.x")
            animation.duration = 1.5
            animation.fromValue = -animateView.frame.size.width
            animation.toValue = animateView.frame.size.width
            animation.repeatCount = .infinity

            gradientLayer.add(animation, forKey: "")
        }
    }
    func getSubViewsForAnimate() -> [UIView] {
        var obj: [UIView] = []
        for objView in view.subviewsRecursive() {
            obj.append(objView)
        }
        return obj.filter({ (obj) -> Bool in
            obj.shimmerAnimation

        })
    }

My code function stopAnimation;

@objc func stopAnimation() {
        for animateView in getSubViewsForAnimate() {
            animateView.layer.removeAllAnimations()
            animateView.layer.mask = nil
            timerShimmer.invalidate()
            refresh.endRefreshing()


        }


    }

When I pull down and do the update the animation continues to act and for some reason does not stop.What did I do wrong?

 @objc func obnova() {


        self.startAnimation()
        self.tableView.reloadData()

        self.loadObjects1()
        self.loadObjects2()
        self.loadObjects3()

      // self.refresh.endRefreshing()

    }



override func viewDidLoad() {
        super.viewDidLoad()

 timerShimmer = Timer.init(timeInterval: 0.2, target: self, selector: #selector(stopAnimation), userInfo: nil, repeats: true)
}

Help me Please?

4

1 回答 1

0

像下面一样更改最后一部分并尝试

func startTimer() {
    if timerShimmer != nil {
        timerShimmer.invalidate()
        timerShimmer = nil
    }

    timerShimmer = Timer.init(timeInterval: 0.2, target: self, selector: #selector(stopAnimation), userInfo: nil, repeats: true)
}

@objc func obnova() {
    self.startAnimation()
    self.tableView.reloadData()

    self.loadObjects1()
    self.loadObjects2()
    self.loadObjects3()
    startTimer()
}

override func viewDidLoad() {
    super.viewDidLoad()
    startTimer()
}
于 2019-06-12T09:31:32.530 回答