将UIView的CALayer动画化为圆角

Mic*_*ine 8 animation core-animation rounded-corners catransition ios

我试图动画我视角的四舍五入.cornerRadius属性被列为可动画,但我似乎无法让它工作.我实际上也无法获得任何其他属性的动画,但角落是我感兴趣的.这是我的代码,它非常简单:

[CATransaction begin];
[CATransaction setValue: [NSNumber numberWithFloat: 2.0f] forKey:kCATransactionAnimationDuration];

self.myView.layer.cornerRadius = 50.0f;

[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)

我在这里想念的是什么?角落变圆,但它是瞬间而不是2秒钟.

pic*_*ano 10

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"];
Run Code Online (Sandbox Code Playgroud)


Kli*_*akM 6

Swift 2.2版本:

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")
Run Code Online (Sandbox Code Playgroud)

Swift 3.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")
Run Code Online (Sandbox Code Playgroud)

更新:

正如马克注意到的那样,使用它#keyPath描述要设置动画的属性更清晰:

let anim1 = CABasicAnimation(keyPath: #keyPath(CALayer.cornerRadius))
Run Code Online (Sandbox Code Playgroud)

  • #keyPath(CALayer.cornerRadius)稍微好一些. (2认同)