6

我正在尝试对我的视角的四舍五入进行动画处理。 cornerRadius属性被列为可以动画的,但我似乎无法让它工作。我却不能得到任何其他属性要么动画,但边角都是我很感兴趣,这是我的代码,这是相当不错的简单:将UIView的CALayer动画化为圆角

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

self.myView.layer.cornerRadius = 50.0f; 

[CATransaction commit]; 

缺少什么我在这里的家伙?角落变圆,但是瞬间而不是2秒。

回答

8
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"]; 
+0

此代码位于何处?在viewDidLoad中?或viewWillAppear?或viewDidAppear? – picciano 2011-05-04 18:20:19

+0

这是按钮按下的动作。 – 2011-05-04 18:21:21

+0

查看以上新的改进的答案 – picciano 2011-05-04 18:59:35

4

雨燕2.2版本:

let anim1 = CABasicAnimation(keyPath: "cornerRadius") 
anim1.timingFunction = CAMediaTimingFunction.functionWithName(kCAMediaTimingFunctionLinear) 
anim1.fromValue = 0 
anim1.toValue = 50 
anim1.duration = 2.0 
myView.layer.addAnimation(anim1, forKey: "cornerRadius") 

雨燕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") 

更新:

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

let anim1 = CABasicAnimation(keyPath: #keyPath(CALayer.cornerRadius)) 
+1

#keyPath(CALayer.cornerRadius)会稍微好一些。 – 2017-05-12 11:42:11