如何在 Swift 中使用 CoreAnimation 为 UILabel 文本 属性 制作动画?
How would one animate UILabel text property with CoreAnimation in Swift?
我想使用带有缓动函数(例如 easeInOutQuad)的 CoreAnimation 将 UILabel.text 值从 0 增加到 100。但似乎文本 属性 不可设置动画。那么如何借助CA来实现呢?或者我需要自己实现缓动函数并使用 GCD 调用它吗?
谢谢
P.S。我想尽可能坚持CA。
class ViewController: UIViewController {
@IBOutlet weak var label: UILabel!
var counter = 0
override func viewDidLoad() {
super.viewDidLoad()
let timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("animate"), userInfo: nil, repeats: true)
timer.fire()
}
func animate() {
UIView.transitionWithView(label,
duration: 1.0,
options: [.CurveEaseInOut],
animations: { () -> Void in
self.counter += 1
self.label.text = "\(self.counter)"
}, completion: nil)
}
}
您可以使用核心动画来实现。您可以为标签添加动画。尝试以下
CATransition *textAnimation = [CATransition animation];
textAnimation.type = kCATransitionMoveIn;
textAnimation.duration = 0.5;
textAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[numLabel.layer addAnimation:textAnimation forKey:@"changeTextTransition"];
您可以在添加动画后随时更改您的标签文本,它会动画化。
numLabel.text = "1";
我想使用带有缓动函数(例如 easeInOutQuad)的 CoreAnimation 将 UILabel.text 值从 0 增加到 100。但似乎文本 属性 不可设置动画。那么如何借助CA来实现呢?或者我需要自己实现缓动函数并使用 GCD 调用它吗? 谢谢
P.S。我想尽可能坚持CA。
class ViewController: UIViewController {
@IBOutlet weak var label: UILabel!
var counter = 0
override func viewDidLoad() {
super.viewDidLoad()
let timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("animate"), userInfo: nil, repeats: true)
timer.fire()
}
func animate() {
UIView.transitionWithView(label,
duration: 1.0,
options: [.CurveEaseInOut],
animations: { () -> Void in
self.counter += 1
self.label.text = "\(self.counter)"
}, completion: nil)
}
}
您可以使用核心动画来实现。您可以为标签添加动画。尝试以下
CATransition *textAnimation = [CATransition animation];
textAnimation.type = kCATransitionMoveIn;
textAnimation.duration = 0.5;
textAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[numLabel.layer addAnimation:textAnimation forKey:@"changeTextTransition"];
您可以在添加动画后随时更改您的标签文本,它会动画化。
numLabel.text = "1";