2014-06-09 16 views
5

Ho un UIImageView richiamato in modo programmatico, sto cercando di farlo girare ma non funziona. L'immagine verrà posizionata all'interno di un UITableView dinamico (non posso cambiarlo in statico). L'immagine appare bene nella mia vista tabella ma non gira.CABasicAnimazione non funzionante con 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"]; 

risposta

7

Probabilmente è perché si sta tentando di avviare l'animazione in viewDidLoad. Suggerirei di riorganizzare il codice in modo tale da creare l'istanza della vista dell'immagine in viewDidLoad, ma poi attendere fino a visualizzare viewDidAppear: viene effettivamente chiamato per avviare l'animazione.

@property (strong, nonatomic) UIImageView *imageView; 

E poi

- (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

Grazie! Una soluzione così semplice, solo per riferimento, perché questo metodo ha funzionato? è perché ha aspettato fino a viewDidLoad? – Ed3121577

+4

@ user3121577 Fondamentalmente, non si dovrebbe mai provare ad avviare un'animazione finché la vista non viene effettivamente visualizzata sullo schermo. Nel punto in cui viewDidLoad viene chiamato, la vista del controller della vista è stata caricata, ma non è ancora stata aggiunta alla gerarchia della vista, quindi a volte le animazioni e cose simili nella vista, o le sue sottoview possono essere buttate fuori, perché stanno succedendo troppo presto nel ciclo di vita. –

+0

Beh, questo ha senso, grazie ancora! – Ed3121577

Problemi correlati