Sway Animation в iOS - PullRequest
       24

Sway Animation в iOS

0 голосов
/ 18 июня 2011

Мне было интересно, возможно ли сделать какую-нибудь качающуюся анимацию в iOS.Например, анимация колебаний будет похожа на знак магазина, дующий на ветру.думаю вестерны.Я хотел бы сделать этот вид анимации при нажатии кнопки.Я иду на западный вид чувств, и это действительно перевернул бы это.Заранее спасибо, если вы знаете, как сделать что-то подобное.

1 Ответ

6 голосов
/ 26 июня 2011

Для этого вам нужно заранее сделать несколько вещей, например, установить опорную точку слоя (0.5,0.0).например:

swaybtn.layer.anchorPoint = CGPointMake(0.5, 0.0);

И затем создайте функцию, которая вызывается при нажатии кнопки, которая запускает анимацию покачивания назад, другую, которая движется вперед, и последнюю, которая перемещаетсявернуться в исходное положение.Заданные градусы показывают, как далеко будет отклоняться качание, а второе число в вращении AndPerspectiveTransform указывает направление, в котором будет колебаться качание.Функции следующие:

-(void)sway:(id)sender{

CGFloat degrees = 50.0;

CALayer *layer;
layer = swaybtn.layer;

CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(moveForward)];

rotationAndPerspectiveTransform.m34 = 1.0 / -400;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, degrees * M_PI / 180.0f, -1.0f, 0.0f, 0.0f);
layer.transform = rotationAndPerspectiveTransform;

[UIView commitAnimations];

}

-(void)moveForward{

CALayer *layer;
layer = swaybtn.layer;

CGFloat degrees = 50.0;

CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;

[UIView beginAnimations:@"swayforward" context:NULL];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(moveBack)];

rotationAndPerspectiveTransform.m34 = 1.0 / -400;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, degrees * M_PI / 180.0f, 1.0f, 0.0f, 0.0f);
layer.transform = rotationAndPerspectiveTransform;

[UIView commitAnimations];

}

-(void)moveBack{

CALayer *layer;
layer = swaybtn.layer;

CGFloat degrees = 50.0;

CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;

[UIView beginAnimations:@"moveback" context:NULL];
[UIView setAnimationDuration:0.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

rotationAndPerspectiveTransform.m34 = 1.0 / -400;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, degrees * M_PI / 180.0f, 0.0f, 0.0f, 0.0f);
layer.transform = rotationAndPerspectiveTransform;

[UIView commitAnimations];

}

И вот, пожалуйста.У вас должна быть анимация, которая покачивает объект взад-вперед, как висящий знак.

...