Estoy tratando de hacer vibrar/agitar un elemento de IU, es decir, un control, como si hubiera sido golpeado, y está resonando. Puedo usar Core Animation agitarlo vertical, horizontal o ambos, por un píxel:¿La mejor manera de hacer vibrar un elemento de UI?
CABasicAnimation* rotationXAnimation;
rotationXAnimation = [CABasicAnimation animationWithKeyPath:@"position.y"];
rotationXAnimation.fromValue = [NSNumber numberWithFloat: ((UIControl *) sender).center.y-1.0 ];
rotationXAnimation.toValue = [NSNumber numberWithFloat: ((UIControl *) sender).center.y+1.0 ];
rotationXAnimation.duration = 0.2;
rotationXAnimation.cumulative = NO;
rotationXAnimation.repeatCount = 10.0;
rotationXAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
[((UIControl *) sender).layer addAnimation:rotationXAnimation forKey:@"upDownAnimation"];
O puedo girar por un pequeño arco de ida y vuelta alrededor del eje z (-M_PI * 0,02 y M_PI * 0.02) :
CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.fromValue = [NSNumber numberWithFloat: -M_PI * 0.02 ];
rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 0.02 ];
rotationAnimation.duration = 0.2;
rotationAnimation.cumulative = NO;
rotationAnimation.repeatCount = 10.0;
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
[((UIControl *) sender).layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
Ninguno de ellos parece tan agradable. ¿Alguien tiene algunas buenas alternativas? Agradecería especialmente las geniales ideas de KeyPath para probar.
Gracias!
Actualización:
El siguiente, donde estoy Contratantes y ampliar el control, es mejor, pero todavía estoy en busca de otras ideas.
CABasicAnimation* scaleAnimation;
scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
scaleAnimation.fromValue = [NSNumber numberWithFloat: 0.95 ];
scaleAnimation.toValue = [NSNumber numberWithFloat: +1.05 ];
scaleAnimation.duration = 0.1;
scaleAnimation.cumulative = NO;
scaleAnimation.repeatCount = 10.0;
scaleAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
[((UIControl *) sender).layer addAnimation:scaleAnimation forKey:@"scaleAnimation"];
esto es sólo en una dirección - de lado a lado - ¿no? – mahboudz
Sí. Pero puede crear una animación de fotograma clave que utiliza una ruta de la misma manera que anima el campo 'posición' que es un CGPoint. –