«Шаткая» анимация iPhone на UiImageView - PullRequest
7 голосов
/ 11 августа 2011

Я пытаюсь сделать иконку "дрожащей".

При загрузке моего контроллера я создаю Таймер, подобный этому:

[NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(shakeIphonePic) userInfo:nil repeats:YES];

А вот мой метод шейкера:

- (void)shakeIphonePic 
{
    [UIView animateWithDuration:0.09
                          delay:0
                        options:UIViewAnimationOptionAllowUserInteraction
                     animations:^{
                         self.iphonePic.layer.transform = CATransform3DMakeRotation(DegreesToRadians(8.0), 0.0, 0.0, 1.0);
                     }
                    completion:^(BOOL finished) {
                        [UIView animateWithDuration:0.09
                                         animations:^(void) {
                                             self.iphonePic.layer.transform = CATransform3DMakeRotation(DegreesToRadians(-16.0), 0.0, 0.0, 1.0);
                                         }];
                    }
    ];
}

Это не так хорошо, как я ожидал, но ... это не главная проблема.

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

Можете ли вы предложить мне более эффективный способ встряхнуть мою икону?

1 Ответ

27 голосов
/ 11 августа 2011
CABasicAnimation* anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
[anim setToValue:[NSNumber numberWithFloat:0.0f]];
[anim setFromValue:[NSNumber numberWithDouble:M_PI/16]]; // rotation angle
[anim setDuration:0.1];
[anim setRepeatCount:NSUIntegerMax];
[anim setAutoreverses:YES];
[self.viewYouAreShaking.layer addAnimation:anim forKey:@"iconShake"];

Swift версия

let anim=CABasicAnimation(keyPath: "transform.rotation")
anim.toValue=NSNumber(double: -M_PI/16)
anim.fromValue=NSNumber(double: M_PI/16)
anim.duration=0.1
anim.repeatCount=1.5
anim.autoreverses=true
viewYouAreShaking.layer.addAnimation(anim, forKey: "iconShake")
...