【问题标题】:How can I repeat chained animation in Swift?如何在 Swift 中重复链式动画?
【发布时间】:2019-10-12 13:13:14
【问题描述】:

我想永远为整个链条制作动画。

UIView.animate(withDuration: 2.0, delay: 0.2, options: .curveEaseOut, animations: {
        self.circleImageView.transform = CGAffineTransform(scaleX: 9, y: 9)
    }) { (_) in
        UIView.animate(withDuration: 2.0, delay: 0.2, options: .curveEaseIn, animations: {
            self.circleImageView.transform = CGAffineTransform(scaleX: 0.01, y: 0.01)
        }, completion: nil)
    }

【问题讨论】:

    标签: swift xcode animation uikit xcode11


    【解决方案1】:

    您可以将两个动画包装在一个关键帧动画中。那你可以.repeat那个:

    UIView.animateKeyframes(withDuration: 4.4, delay: 0, options: .repeat, animations: { 
        UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 2.0/4.4) { 
            self.circleImageView.transform = .init(scaleX: 9, y: 9)
        }
        UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 2.0/4.4) { 
            self.circleImageView.transform = .init(scaleX: 0.01, y: 0.01)
        }
    })
    

    【讨论】:

      【解决方案2】:

      将其封装在一个方法中:

      func repeatingAnimation() {
          UIView.animate(withDuration: 2.0, delay: 0.2, options: .curveEaseOut, animations: {
              self.circleImageView.transform = CGAffineTransform(scaleX: 9, y: 9)
          }) { (_) in
              UIView.animate(withDuration: 2.0, delay: 0.2, options: .curveEaseIn, animations: {
                  self.circleImageView.transform = CGAffineTransform(scaleX: 0.01, y: 0.01)
              }, completion: { [weak self] _ in
                  self?.repeatingAnimation()
              })
          }
      }
      

      【讨论】:

      • 不会造成内存泄漏吗?
      • @MaricVikike 不,我添加了一个捕获列表并将 self 捕获为弱,因为否则您确实会发生内存泄漏。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多