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

标签 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。比例因子

在第一个缩放动画中,您指定 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.5 而不是 0.3 来获得恰好一半的动画。考虑以下部分:

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

关于ios - 动画 UIButton 的文本以捏合和捏开不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43886159/

相关文章:

ios - 在 Swift 中使用 Facebook 自定义登录获取用户信息

ios - 发出异步网络请求时我应该使用 `weak self` 吗?

ios - 从 InputStream 中获取数据

ios - 快速编译错误

ios - 使用自动布局将 subview 的宽度与其父 View 匹配

ios - CLCircularRegion didEnterRegion 不起作用

ios - 通过蓝牙或在 iOS 中的本地 WiFi 网络之间进行点对点语音聊天

ios - 如何防止状态栏在 UIImagePickerController 覆盖整个屏幕之前消失?

ios - Swift 中的 AVPlayer 状态监听器

swift - ~>(波浪号大于)在此 Swift 代码中是什么意思?