Анимация CALayer из UIView в круглые углы

Я пытаюсь оживить округление углов моего зрения. Свойство cornerradius указан как animatible, но я не могу показаться, чтобы заставить его работать. Я на самом деле не могу получить какие-либо другие свойства для анимации, но углы-это то, что меня интересует. Вот мой код, и он чертовски прост:

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

self.myView.layer.cornerRadius = 50.0f;

[CATransaction commit];

что я упускаю здесь, ребята? Углы становятся закругленными, но это происходит мгновенно, а не занимает 2 секунды.

3 ответов


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

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

обновление:

как заметил Марк, это чище использовать #keyPath чтобы описать свойство, которое будет анимировано:

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

Кажется, вы слишком много думаете об этом. Я смог обойтись без использования CoreAnimation. Вот что я сделал:--2-->

UIView.animate(withDuration: animationDuration) {
    self.myView.layer.cornerRadius = 10.0
}