6

Estoy tratando de animar el redondeo de las esquinas de mi vista. La propiedad cornerRadius aparece como animatible, pero parece que no puedo hacer que funcione. En realidad, no puede obtener ninguna de las otras propiedades para animar o bien, pero las esquinas son lo que yo estoy interesado en Aquí está mi código, y es bastante maldito simple:.Animando a CALayer de UIView para redondear esquinas

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

self.myView.layer.cornerRadius = 50.0f; 

[CATransaction commit]; 

qué estoy perdiendo aquí chicos? Las esquinas se redondean, pero es instantáneo en lugar de tomar 2 segundos.

Respuesta

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

¿Dónde está este código? en viewDidLoad? o viewWillAppear? o viewDidAppear? – picciano

+0

Es la acción de presionar un botón. –

+0

ver arriba para una respuesta nueva y mejorada – picciano

4

Swift 2.2 versión:

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 versión 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") 

Actualización:

Como Mark notado, es más limpio usar #keyPath para describir la propiedad que se va a animar:

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

#keyPath (CALayer.cornerRadius) sería un poco mejor. –

Cuestiones relacionadas