简体   繁体   English

将 UIView 的 CALayer 动画到圆角

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM