动画UIButton的文本以捏合和捏合不起作用

时间:2017-05-10 07:32:33

标签: ios swift swift3 uibutton uiviewanimation

所以我有一个UIButton,我想用动画更改文本。动画假设的工作方式是按钮的文本一直缩小到虚无,然后文本发生变化,然后缩小到原始大小。我仍然坚持试图让文本正确地缩小到虚无。

如果我使用此代码:

 UIView.animateKeyframes(withDuration: 0.6, delay: 0, options: .calculationModeLinear, animations: {
        //Zzzeeeewwwwwwwwww
        UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.3, animations: {
            self.submitButton.titleLabel?.transform = self.submitButton.titleLabel!.transform.scaledBy(x: 0.001, y: 0.001);
        })


        //Wwwwwweeeeeeyyyyyppp
        UIView.addKeyframe(withRelativeStartTime: 0.3, relativeDuration: 0.3, animations: {
               self.submitButton.titleLabel?.transform = self.submitButton.titleLabel!.transform.scaledBy(x: 100, y: 100);
        })
    }, completion: nil)

我只获得第一部分的动画,它可以正确缩小,但不会缩放。它只是重新回到原位而不会随着它的增长而一直动画。

我尝试将UIView动画与持续时间("老式的方式")联系在一起,反之亦然。第一部分立即发生,然后它正确地重新生长。这是代码:

  UIView.animate(withDuration: 0.3, animations: { 
        self.submitButton.titleLabel?.transform = self.submitButton.titleLabel!.transform.scaledBy(x: 0.01, y: 0.01);
    }) { _ in
        UIView.animate(withDuration: 0.3, animations: {
            self.submitButton.titleLabel?.transform = self.submitButton.titleLabel!.transform.scaledBy(x: 100, y: 100);
        }, completion: nil)
    }

我不知道可能导致此问题的原因。我被困在这几个小时。我还没有改变文字。这导致了另外一系列问题。

1 个答案:

答案 0 :(得分:1)

有几点需要注意:

1。缩放因子

在第一个缩放动画中,您指定label.transform.scaledBy(x: 0.001, y: 0.001)
但在第二个:label.transform.scaledBy(x: 100, y: 100)

请注意,您需要乘以1000才能获得1.0

2。相对关键帧时间

添加关键帧的方式是指定相对时间,范围为[0.0 - 1.0],因此您需要指定0.3而不是0.5才能获得动画的一半。请考虑以下内容:

UIView.animateKeyframes(withDuration: 0.6, delay: 0, options: .calculationModeLinear, animations: {
    UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.5, animations: {
        view.transform = view.transform.scaledBy(x: 0.001, y: 0.001)
    })

    UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.5, animations: {
        view.transform = view.transform.scaledBy(x: 1000, y: 1000)
    })
}, completion: nil)

如果你从标签中抽象出来,这就是你得到的动画 animation