J'ai un problème très semblable à celui-ci:CATransaction (encore) Animer
Je suis juste essayer d'animer une couche de vue à l'aide CATransaction. Mon problème est que la transformation est appliquée à la vue immédiatement.
J'ai essayé d'exécuter l'animation en utilisant performSelector: withObject: afterDelay: sans succès.
Voici mon code:
- (void)viewDidLoad {
[super viewDidLoad];
view = [[[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)] autorelease];
view.backgroundColor = [UIColor blackColor];
[self.view addSubview:view];
[self performSelector:@selector(animateView) withObject:nil afterDelay:0.1];
}
-(void) animateView {
[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:3.0f] forKey:kCATransactionAnimationDuration];
CALayer *layer = view.layer;
layer.position = CGPointMake(20,
300);
CATransform3D transform = CATransform3DMakeScale(2.0f, 2.0f, 1.0f);
transform = CATransform3DRotate(transform, acos(-1.0f)*1.5f, 1.5f, 1.5f, 1.5f);
layer.transform = transform;
[CATransaction commit];
}
Est-ce que quelqu'un sait ce qui va mal?
Merci, Vincent.
Avez-vous essayé de désactiver explicitement disableActions? Je sais que les transactions implicites sont désactivées sur l'iPhone, il est donc possible que CATransaction soit simplement désactivé par défaut. BTW, vous pouvez utiliser '[CATransaction setAnimationDuration: 0.3]' au lieu de '-setValue: forKey:'. –
J'ai voté en bas ceci simplement parce que la question exacte que vous liez à la réponse, que vous n'avez pas essayée dans votre exemple de code. –
Cela ne résout pas le problème de l'animation réelle en utilisant un CATransaction, mais je suis d'accord que l'utilisation d'animations UIView est la meilleure solution. Notez également qu'il est plus logique d'animer dans viewWillAppear/viewDidAppear, pas viewDidLoad - les vues peuvent être chargées longtemps avant qu'elles ne soient affichées. –