ios - 使用 CAAnimation 无限旋转两个变量

标签 ios swift caanimation

我在一个标签(存储在“profile/uid”下)中从 firebase 数据库中调用用户“Weight”,该标签有两个类别“kg”和“lbs”。我希望标签能够以千克为单位显示用户的体重,然后淡出到磅,然后再次回到千克,依此类推。到目前为止,我已经编写了以下代码,它不断淡入和淡出以磅为单位的重量,我不确定一旦磅消失如何让它显示以公斤为单位的重量:

func weight() {

    let userRf = self.firDatabaseRef.child("profile").child("\(User!.uid)").observe(FIRDataEventType.value, with: { (snapshot) in
        if snapshot.exists() {
            if let weight = snapshot.childSnapshot(forPath: "weight").value as? [String: AnyObject] {
                if let kg = weight["kg"] as? Float, let lbs = weight["lbs"] as? Int {

                    let animation: CATransition = CATransition()
                    animation.duration = 2.0
                    animation.type = kCATransitionFade
                    animation.repeatDuration = .infinity
                    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
                    self.displayWeight.layer.add(animation, forKey: "changeTextTransition")

                    self.displayWeight.text = "\(lbs) lbs"

                }
            }
        }
    }

}

最佳答案

一种方法是使用重复的 UIVIew 动画和 Timer:

// set up some helpful constants
let kgsText = "\(kgs) kgs"
let lbsText = "\(lbs) lbs"
let fadeDuration = 2.0

// keep track of which unit is being displayed
var isDisplayingKgs = true

// animate the fade in and out, repeating
UIView.animate(withDuration: fadeDuration, delay: 0, options: [.autoreverse, .repeat], animations: {
    label.alpha = 0
}, completion: nil)

// start the timer to switch the text after a short delay
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + fadeDuration) {
    self.displayWeight.text = lbsText
    isDisplayingKgs = false
    Timer.scheduledTimer(withTimeInterval: fadeDuration * 2, repeats: true, block: { timer in
        self.displayWeight.text = isDisplayingKgs ? lbsText : kgsText
        isDisplayingKgs = !isDisplayingKgs
    })
}

这是假设您的标签一开始是可见的 (alpha = 1)。调度延迟是为了确保第一次转换发生在标签第一次淡出时,但在计时器开始之前。

这是动画效果:

gif of the label animation

关于ios - 使用 CAAnimation 无限旋转两个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43857483/

相关文章:

ios - 如何使自定义键盘与 Swift 一起工作

ios - 为 xCode 问题安装 OpenCV

Swift 中的 Objective-C 方法参数

node.js - Firebase 云消息传递成功 sendToDevice 但没有通知

ios - 添加减速和加速以缩放动画

ios - 我们可以在多线程中使用 MTLRenderPipelineState 和 MTLDepthStencilState 吗?

ios - 在iOS 7中点击UITableView时,所有UITableCells都消失

swift - Swift 中类似控制中心的滑动 View 实现

ios - 使用动画更改 UIView 背景颜色

ios - 1.0 秒后 CAKeyframeAnimation 关键时间未执行