UIImageView анимация слева направо - PullRequest
1 голос
/ 19 июня 2011

Я хочу переместить мой UIImageView слева направо и наоборот.Я выполняю половину этого, используя следующий код:

[UIView setAnimationDuration:1.0];
[UIView setAnimationRepeatCount:10];
[UIView setAnimationRepeatAutoreverses:YES];

CGPoint pos = mover.center;
pos.x = 100.0f;
mover.center = pos;

[UIView commitAnimations];

Где mover - это UIImageView.Проблема, с которой я сталкиваюсь, заключается в том, что я не могу полностью переместить ее слева направо.Приведенный выше код перемещает его только справа налево.Я хочу идти дальше влево от центра.Кто-нибудь может направить меня, пожалуйста?

Ответы [ 3 ]

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

Я не думаю, что UIKit анимации предоставляют вам прямую ключевую анимацию для получения эффекта колебаний.Мы можем попытаться добиться этого, используя делегаты, вызывая одну анимацию за другой, но это не так эффективно, как CAKeyframeAnimation.Чтобы использовать это, вы должны будете включить QuartzCore framework в ваш проект и #import <QuartzCore/QuartzCore.h>.Вы можете добиться эффекта колебания, выполнив что-то вроде этого:

self.mover.center = CGPointMake(160, 240);

CAKeyframeAnimation *animation;

animation = [CAKeyframeAnimation animationWithKeyPath:@"position.x"];
animation.duration = 3.0f;
animation.repeatCount = 10;
animation.values = [NSArray arrayWithObjects:
                    [NSNumber numberWithFloat:160.0f],
                    [NSNumber numberWithFloat:320.0f],
                    [NSNumber numberWithFloat:160.0f],
                    [NSNumber numberWithFloat:0.0f],
                    [NSNumber numberWithFloat:160.0f], nil]; 
animation.keyTimes = [NSArray arrayWithObjects:
                      [NSNumber numberWithFloat:0.0],
                      [NSNumber numberWithFloat:0.25],
                      [NSNumber numberWithFloat:.5], 
                      [NSNumber numberWithFloat:.75],
                      [NSNumber numberWithFloat:1.0], nil];    

animation.removedOnCompletion = NO;

[self.mover.layer addAnimation:animation forKey:nil];

Этот фрагмент кода колеблется в направлении слева направо довольно близко к вашему описанию, хотя для получения необходимого эффекта вам, возможно, придется изменить егонемного.

4 голосов
/ 20 июня 2011

Предполагая, что вы можете настроить таргетинг на iOS4, этого можно достичь с помощью

   typedef void (^completionBlock)(BOOL);
   completionBlock moveToExtremeRight = ^(BOOL finished){
       // animate, with repetition, from extreme left to extreme right 
       [UIView animateWithDuration:2.0 // twice as long!
                          delay:0.0
                         options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionRepeat|UIViewAnimationAutoReverse
                     animations:^{
                          mover.transform = CGAffineTransformMakeTranslation(100, 0);
                     }
                     completion:nil
       ];
   };
   mover.transform = CGAffineTransformIdentity;
   // animate once, to the extreme left
   [UIView animateWithDuration:1.0
                          delay:0.0
                        options:UIViewAnimationOptionAllowUserInteraction
                     animations:^{
                          // or whatever is appropriate 'extreme left'
                          mover.transform = CGAffineTransformMakeTranslation(-100, 0);
                     }
                     // on completion, start a repeating animation
                     completion:moveToExtremeRight
   ];
0 голосов
/ 20 июня 2011

Вместо настройки центра вы должны посмотреть на настройку преобразования.С центром вы устанавливаете центр, что означает, что вы должны правильно рассчитать центр по отношению к размеру изображения.

Чтобы переместить его влево, установите преобразование с переводом -320.Чтобы переместить его обратно, установите его для преобразования идентификаторов.

...