【问题标题】:How can I animate the frame and alpha of a UIButton's titleLabel simultaneously?如何同时为 UIButton 的 titleLabel 的框架和 alpha 设置动画?
【发布时间】:2018-01-16 17:39:23
【问题描述】:

我想为我的UIButtontitleLabel 的宽度和alpha 设置动画。 alpha 动画应在 1 秒后开始。
我正在尝试使用 Core Animation:

    let animSize = CAKeyframeAnimation(keyPath: "bounds")
    animSize.values = [btn1.layer.frame,CGRect(origin: btn1.layer.frame.origin, size: CGSize(width: 300, height: btn1.layer.frame.height))]
    animSize.duration = 3
    animSize.isRemovedOnCompletion = false
    animSize.fillMode = kCAFillModeForwards
    btn1.layer.add(animSize, forKey: "bounds")

    let animAlpha = CABasicAnimation(keyPath: "opacity")
    animAlpha.fromValue = 0.0
    animAlpha.toValue = 1.0
    animAlpha.timeOffset = 1.0
    animAlpha.isRemovedOnCompletion = false
    animAlpha.fillMode = kCAFillModeForwards
    btn1.titleLabel?.layer.add(animAlpha, forKey: "opacity")

当我单独运行动画时,一切正常,但是当我一起运行它们时,只有第一个动画(“边界”)正在评估。我知道我可以用UIView.animate 做到这一点,但在这种情况下,我将失去“延迟”选项。我还尝试将这些动画放在CAAnimationGroup 中,但没有任何改变。我想同时运行这些动画,因此我不能使用完成块。

感谢您的建议。

【问题讨论】:

    标签: ios swift animation core-animation ios-animations


    【解决方案1】:

    UIView.animate 不会丢失“延迟”选项。您可以使用两个动画块来达到相同的效果:

    UIView.animate(withDuration: 3) {
        btn1.frame = CGRect(origin: btn1.frame.origin, size: CGSize(width: 300, height: btn1.frame.height))
    }
    
    UIView.animate(withDuration: 2, delay: 1, options: [], animations: {
        btn1.alpha = 1
    }, completion: nil)
    

    【讨论】:

      【解决方案2】:

      您也可以通过将按钮的宽度约束挂钩为 IBOutlet 来尝试使用自动布局

       btn1.withCon.constant = 300 
       UIView.animate(withDuration: 3) {
          self.view.layoutIfNeeded()
      }
      
      UIView.animate(withDuration: 2, delay: 1, options: [], animations: {
          btn1.alpha = 1
      }, completion: nil)
      

      【讨论】:

        猜你喜欢
        • 2020-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-25
        • 2013-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多