El siguiente fragmento gira una vista llamada mediante el uso de la animación con marco de teclas. La animación consiste en 3 cuadros repartidos en 1 segundo, con la vista girada a 0º, 180º y 360º en el primer, segundo y último fotograma, respectivamente. El código es el siguiente:
CALayer* layer = someView.layer;
CAKeyframeAnimation* animation;
animation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.duration = 1.0;
animation.cumulative = YES;
animation.repeatCount = 1;
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
animation.values = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0 * M_PI],
[NSNumber numberWithFloat:0.5 * M_PI],
[NSNumber numberWithFloat:1.0 * M_PI], nil];
animation.keyTimes = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:0.5],
[NSNumber numberWithFloat:1.0], nil];
animation.timingFunctions = [NSArray arrayWithObjects:
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear],
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], nil];
[layer addAnimation:animation forKey:@"transform.rotation.z"];
Si desea animación a la izquierda, debe usar valores negativos. Para una animación un poco más básica, puede usar CABasicAnimation:
CALayer* layer = someView.layer;
CABasicAnimation* animation;
animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.fromValue = [NSNumber numberWithFloat:0.0 * M_PI];
animation.toValue = [NSNumber numberWithFloat:1.0 * M_PI];
animation.duration = 1.0;
animation.cumulative = YES;
animation.repeatCount = 1;
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
[layer addAnimation:rotationAnimation forKey:@"transform.rotation.z"];
¿Debo incluir algo especial? Xcode se queja de todas las cosas de kCA como kCAMediaTimingFunctionLinear. Ellos son desconocidos. – Thanks
".objc_class_name_CAKeyframeAnimation", hace referencia a partir de: literal triple @__ ObjC @__ cls_refs @ CAKeyframeAnimation en TestClass.o ld: Símbolo (s) que no se encuentra collect2: ld devolvió el código de salida 1 – Thanks
Cada vez que tenga un problema con algo que no parece encontrado, debe buscarlo en la documentación para ver dónde está definido. En este caso, esas constantes se definen en CAMediaTiming y CAMediaTimingFunction que forman parte del marco QuartzCore. Si no ha agregado QuartzCore.framework, ese es probablemente su problema. –