簡體   English   中英

將 UIView 的 CALayer 動畫到圓角

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM