2014-06-09 20 views
5

Ich habe eine UIImageView, die programmatisch aufgerufen wird, ich versuche, es zu drehen, aber es funktioniert nicht. Das Bild wird in einem dynamischen UITableView platziert (ich kann es nicht in statisch ändern). Das Bild erscheint in meiner Tabellenansicht gut, aber es dreht sich einfach nicht.CABasicAnimation funktioniert nicht mit 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"]; 

Antwort

7

Es ist wahrscheinlich, weil Sie versuchen, die Animation in ViewDidLoad zu starten. Ich würde vorschlagen, Ihren Code so zu reorganisieren, dass Sie die Bildansichtsinstanz in viewDidLoad erstellen, aber dann warten, bis viewDidAppear: aufgerufen wird, um die Animation tatsächlich zu starten.

@property (strong, nonatomic) UIImageView *imageView; 

Und dann

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

Dank! Solch eine einfache Lösung, nur als Referenz, warum hat diese Methode funktioniert? liegt es daran, dass es bis zum viewDidLoad gewartet hat? – Ed3121577

+4

@ user3121577 Grundsätzlich sollten Sie niemals versuchen, eine Animation zu starten, bis die Ansicht tatsächlich auf dem Bildschirm erscheint. An der Stelle, an der viewDidLoad aufgerufen wird, wurde die View-Controller-Ansicht geladen, aber noch nicht zur View-Hierarchie hinzugefügt, sodass manchmal Animationen und ähnliche Dinge in der View oder deren Subviews rausgeworfen werden können passiert zu früh im Lebenszyklus. –

+0

Nun, das macht Sinn, nochmals vielen Dank! – Ed3121577

Verwandte Themen