[英]Animating CALayer of UIView to round corners
我正在嘗試為我的視圖角落的圓角設置動畫。 cornerRadius 屬性被列為動畫,但我似乎無法讓它工作。 我實際上也無法讓任何其他屬性進行動畫處理,但角落是我感興趣的。這是我的代碼,它非常簡單:
[CATransaction begin];
[CATransaction setValue: [NSNumber numberWithFloat: 2.0f] forKey:kCATransactionAnimationDuration];
self.myView.layer.cornerRadius = 50.0f;
[CATransaction commit];
我在這里想念什么? 角落變得圓潤,但它是瞬時的,而不是 2 秒。
CABasicAnimation *anim1 = [CABasicAnimation animationWithKeyPath:@"cornerRadius"];
anim1.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
anim1.fromValue = [NSNumber numberWithFloat:0.0f];
anim1.toValue = [NSNumber numberWithFloat:50.0f];
anim1.duration = 2.0;
[self.myView.layer addAnimation:anim1 forKey:@"cornerRadius"];
Swift 4.2/5 :
let anim1 = CABasicAnimation(keyPath: "cornerRadius")
anim1.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear)
anim1.fromValue = 0
anim1.toValue = 50
anim1.duration = 2.0
layer.add(anim1, forKey: "cornerRadius")
Swift 3/4.0 :
let anim1 = CABasicAnimation(keyPath: "cornerRadius")
anim1.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
anim1.fromValue = 0
anim1.toValue = 50
anim1.duration = 2.0
myView.layer.add(anim1, forKey: "cornerRadius")
更新:
正如 Mark 所注意到的,使用#keyPath
來描述要設置動畫的屬性更簡潔:
let anim1 = CABasicAnimation(keyPath: #keyPath(CALayer.cornerRadius))
看來你是想多了。 我能夠在不使用 CoreAnimation 的情況下度過難關。 這是我所做的:
UIView.animate(withDuration: animationDuration) {
self.myView.layer.cornerRadius = 10.0
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.