2010-09-06 13 views
5

Chcę zbudować pulsującą animację na prostym UIImageView. ImageView powiększy się nieco, a następnie powróci do swojego pierwotnego rozmiaru.Pulsowanie Animacja

Użyłem poniższy kod:

- (void) doCoolAnimation { 
    [UIView beginAnimations:@"glowingAnimation" context:nil]; 
    [UIView setAnimationRepeatAutoreverses:YES]; 
    [UIView setAnimationRepeatCount:INT_MAX]; 
    [UIView setAnimationDuration:0.25]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    imageView.transform = CGAffineTransformMakeScale(1.15, 1.15); 
    [UIView commitAnimations]; 
} 

to działa prawidłowo na iOS3 ale działa tylko częściowo na iOS4.

Mam kontroler UITabBarController z 2 widokami. Pierwszym z nich jest imageView z animacją, a animacja rozpoczyna się zaraz po wczytaniu widoku. Ale po przejściu do drugiego widoku (za pomocą TabBar) iz powrotem, animacja nie jest już uruchomiona na iOS4. (Ale w systemie iOS3 mogę przełączać się między tymi dwoma widokami, a animacja nadal działa poprawnie.)

Próbowałem również z zegarem, który wywołuje metodę coCoolAnimation co sekundę, ale to nie pomaga w ponownym uruchomieniu animacji.

Czy ktoś może wyjaśnić, dlaczego po przełączeniu widoku animacja zniknęła? Czy istnieje obejście, które może sprawić, że będzie działać na iOS4?

Odpowiedz

9

w ten prosty sposób: -

CABasicAnimation *pulseAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 
pulseAnimation.duration = .5; 
pulseAnimation.toValue = [NSNumber numberWithFloat:1.1]; 
pulseAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
pulseAnimation.autoreverses = YES; 
pulseAnimation.repeatCount = FLT_MAX; 
[ButtonName.layer addAnimation:pulseAnimation forKey:nil]; 
+0

To jest naprawdę cool! Czy jest też i tak, aby sprawdzić, czy jakaś animacja już trwa? – Mithuzz

1

ViewDidLoad jest wywoływany tylko przy pierwszym ładowaniu widoku. Ponieważ widok nie jest zwalniany natychmiast po przełączeniu widoków, tak jak w nim jeszcze istnieje, viewdidLoad nie jest wywoływany ponownie po powrocie do widoku.

Spróbuj wywołać [self doCoolAnimation]; w viewDidAppear. To się nazywa za każdym razem.

- (void)viewDidAppear:(BOOL)animated { 
    [self doCoolAnimation] 
}