Анимация CALayer из UIView в круглые углы - PullRequest
8 голосов
/ 04 мая 2011

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

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

self.myView.layer.cornerRadius = 50.0f;

[CATransaction commit];

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

Ответы [ 3 ]

9 голосов
/ 04 мая 2011
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"];
5 голосов
/ 21 декабря 2016

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 :

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 голос
/ 19 апреля 2018

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

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