Próbuję wibrować/wstrząsnąć elementem interfejsu użytkownika, a mianowicie kontrolką, tak jakby została uderzona i rezonuje. Można użyć animacji Core wstrząsnąć pionowo, poziomo lub zarówno o jeden piksel:Najlepszy sposób wibrowania elementu interfejsu użytkownika?
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"];
albo można obracać przez mały łuk do tyłu i do przodu wokół osi Z (-M_PI M_PI * 0,02 * 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"];
Żaden z tych elementów nie wygląda tak przyjemnie. Czy ktoś ma dobre alternatywy? Byłbym szczególnie wdzięczny za fajne pomysły na keyPaths.
Dzięki!
Aktualizacja:
dodaje się, gdzie jestem zamawiających i rozszerza kontrolę, jest lepiej, ale ciągle szukam innych pomysłów.
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"];
To jest tylko w jeden kierunek - z boku na bok - prawda? – mahboudz
Tak. Ale możesz utworzyć animację klatki kluczowej, która używa ścieżki w ten sam sposób, animując pole "position", które jest CGPoint. –