повернуть UIImageView на 360 градусов с помощью блочного - PullRequest
1 голос
/ 23 февраля 2012

Как я могу повернуть UIImageView на 360 градусов с помощью BLOCK-BASED анимации?

вот моя попытка, но она повторяет 180 вращений вместо двух последовательных анимаций

   void (^anim) (void) = ^{
         uiImgDisc.transform = CGAffineTransformMakeRotation(3.14159265);
    };

    void (^after) (BOOL) = ^(BOOL f){
        [UIView animateWithDuration:1
                              delay:0
                            options:UIViewAnimationCurveLinear
                         animations:^(void){
                             uiImgDisc.transform = CGAffineTransformMakeRotation(3.14159265);
                         }
                         completion:nil];

    };

    [UIView animateWithDuration:1
                          delay:0
                        options:UIViewAnimationCurveLinear | UIViewAnimationOptionRepeat
                     animations:anim
                     completion:after];

1 Ответ

0 голосов
/ 23 февраля 2012

Он не основан на блоках, но вы можете попробовать использовать CAKeyFrameAnimation, где вы указываете несколько ключевых кадров, которые должна включать анимация.Преимущество метода, основанного на блоках, заключается в том, что метод Core Animation позволяет создавать более плавные анимации.

Это может быть немного излишним, поскольку, как говорит Роб, вы можете просто сделать CABasicAnimation и установить для fromValue и toValue0 и 2 * M_PI соответственно.Но этот пример показывает вам, как вы могли бы также сделать произвольную анимацию вращения с плавным движением.

Сначала убедитесь, что вы добавили QuartzCore Framework на этапы сборки.Затем убедитесь, что вы импортируете заголовок, используя

#import <QuartzCore/QuartzCore.h> 

, а затем в своем методе ротации сделайте это:

CAKeyframeAnimation *theAnimation = [CAKeyframeAnimation animation];
theAnimation.values = [NSArray arrayWithObjects:
                       [NSValue valueWithCATransform3D:CATransform3DMakeRotation(0, 0,0,1)],
                       [NSValue valueWithCATransform3D:CATransform3DMakeRotation(3.13, 0,0,1)],
                       [NSValue valueWithCATransform3D:CATransform3DMakeRotation(6.26, 0,0,1)],
                       nil];
theAnimation.cumulative = YES;
theAnimation.duration = 1.0;
theAnimation.repeatCount = 0;
theAnimation.removedOnCompletion = YES;


theAnimation.timingFunctions = [NSArray arrayWithObjects:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn], 
                                [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut],
                                nil
                                ];

[imageView.layer addAnimation:theAnimation forKey:@"transform"];

, вдохновленный следующим: https://github.com/jonasschnelli/UIView-i7Rotate360

ХорошоУдачи!

т

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...