2014-06-09 18 views
5

Mam UIImageView, który jest wywoływany programowo, próbuję go uruchomić, ale nie działa. Obraz zostanie umieszczony wewnątrz dynamicznego UITableView (nie mogę go zmienić na statyczny). Obraz wygląda dobrze w moim widoku tabeli, ale po prostu się nie kręci.CABasicAnimation nie działa z UIImageView

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 122, 38, 38)]; 
    imageView.image = [UIImage imageNamed:@"settings1.png"]; 

    [self.view addSubview:imageView]; 

    CABasicAnimation *spin; 
    spin = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 
    spin.fromValue = [NSNumber numberWithFloat:0]; 
    spin.toValue = [NSNumber numberWithFloat:((360*M_PI)/180)]; 
    spin.duration = 4; 
    spin.repeatCount = 10*1000; 

    [imageView.layer addAnimation:spin forKey:@"360"]; 

Odpowiedz

7

Prawdopodobnie dlatego, że próbujesz uruchomić animację w viewDidLoad. Sugerowałbym reorganizację kodu w taki sposób, aby utworzyć instancję widoku obrazu w viewDidLoad, ale następnie poczekaj, aż funkcja viewDidAppear: zostanie wywołana, aby uruchomić animację.

@property (strong, nonatomic) UIImageView *imageView; 

A potem

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 122, 38, 38)]; 
    self.imageView.image = [UIImage imageNamed:@"settings1.png"]; 

    [self.view addSubview:self.imageView]; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    CABasicAnimation *spin = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 
    spin.fromValue = [NSNumber numberWithFloat:0]; 
    spin.toValue = [NSNumber numberWithFloat:((360*M_PI)/180)]; 
    spin.duration = 4; 
    spin.repeatCount = 10*1000; 

    [self.imageView.layer addAnimation:spin forKey:@"360"]; 
} 
+0

Dzięki! Takie proste rozwiązanie, dla odniesienia, dlaczego ta metoda zadziałała? czy to dlatego, że czekał aż do viewDidLoad? – Ed3121577

+4

@ user3121577 Zasadniczo nigdy nie powinieneś próbować uruchamiać animacji, dopóki widok nie pojawi się na ekranie. W momencie wywołania metody viewDidLoad widok kontrolera widoku został załadowany, ale nie został jeszcze dodany do hierarchii widoków, więc czasami animacje i podobne rzeczy w widoku lub jego podstrony mogą zostać odrzucone, ponieważ dzieje się zbyt wcześnie w cyklu życia. –

+0

Cóż, to ma sens, dzięki jeszcze raz! – Ed3121577