Метрономная анимация UIImageView iOS - PullRequest
0 голосов
/ 26 ноября 2011

Я хотел бы создать анимацию изображения, которая заставляет изображение качаться взад-вперед, подобно метроному. Цель анимации - симулировать эффект, подобный вращающемуся. Вообразите это только с верхней половиной, стрелка будет двигаться вперед и назад, пока не остановится на своей цели. enter image description here

До сих пор я мог заставить стрелку двигаться вперед и назад, однако опорная точка анимации является центром изображения. Я бы хотел, чтобы этот якорь был в центре нижней части изображения. Чтобы имитировать метроном, якорь не может быть там, где он сейчас. Как мне сделать это изменение? Код анимации ниже:

#define RADIANS(degrees) ((degrees * M_PI) / 180.0)


CGAffineTransform leftWobble = CGAffineTransformRotate(CGAffineTransformIdentity, RADIANS(90));
CGAffineTransform rightWobble = CGAffineTransformRotate(CGAffineTransformIdentity, RADIANS(-90));

arrow.transform = leftWobble;  // starting point

[UIView beginAnimations:@"wobble" context:(__bridge void *)arrow];
[UIView setAnimationRepeatAutoreverses:YES]; // important
[UIView setAnimationRepeatCount:10];
[UIView setAnimationDuration:.5];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(wobbleEnded:finished:context:)];

arrow.transform = rightWobble; // end here & auto-reverse

[UIView commitAnimations];

1 Ответ

0 голосов
/ 26 ноября 2011

CALayer имеет свойство anchorPoint , которое можно установить в нижней части изображения стрелки.

У Apple был пример проекта под названием Metronome для iOS, который делает это. Кажется, я больше не могу найти его в Интернете, поэтому, возможно, он был удален, но вот фрагмент кода из него:

    // Set up the metronome arm.
    metronomeArm = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"metronomeArm.png"]];

    // Move the anchor point to the bottom middle of the metronomeArm bounds, so rotations occur around that point.
    metronomeArm.layer.anchorPoint = CGPointMake(0.5, 1.0);
...