[英]Animating CALayer of UIView to round corners
I'm trying to animate the rounding of the corners of my view.我正在尝试为我的视图角落的圆角设置动画。 The cornerRadius property is listed as animatible, but I can't seem to get it to work.
cornerRadius 属性被列为动画,但我似乎无法让它工作。 I actually can't get any of the other properties to animate either, but the corners are what I'm interested in. Here's my code, and it's pretty darn simple:
我实际上也无法让任何其他属性进行动画处理,但角落是我感兴趣的。这是我的代码,它非常简单:
[CATransaction begin];
[CATransaction setValue: [NSNumber numberWithFloat: 2.0f] forKey:kCATransactionAnimationDuration];
self.myView.layer.cornerRadius = 50.0f;
[CATransaction commit];
What am I missing here guys?我在这里想念什么? The corners become rounded, but it's instantaneous instead of taking 2 seconds.
角落变得圆润,但它是瞬时的,而不是 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 : 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 : 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")
Update:更新:
As Mark noticed, it's cleaner to use #keyPath
to describe the property to be animated:正如 Mark 所注意到的,使用
#keyPath
来描述要设置动画的属性更简洁:
let anim1 = CABasicAnimation(keyPath: #keyPath(CALayer.cornerRadius))
Seems like you're overthinking it.看来你是想多了。 I was able to get by without using CoreAnimation.
我能够在不使用 CoreAnimation 的情况下度过难关。 Here's what I did:
这是我所做的:
UIView.animate(withDuration: animationDuration) {
self.myView.layer.cornerRadius = 10.0
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.