2010-08-20 2 views
1

J'ai un problème très semblable à celui-ci:CATransaction (encore) Animer

CATransaction Not Animating

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.

+0

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:'. –

+0

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. –

+0

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. –

Répondre

5

lors de l'animation de la couche de support d'une vue, vous devez être à l'intérieur d'un bloc d'animation UIView, pas seulement un CATransaction:

[UIView beginAnimations:nil context:NULL]; 
// ... your animation code 
[UIView commitAnimations]; 
0

ou vous pouvez utiliser CAAnimationGroup et regrouper les animations à l'échelle et de rotation comme celui-ci ..

CAAnimationGroup * aniGroup = [Animation CAAnimationGroup]; // Configuration des propriétés d'un groupe d'objets

CABasicAnimation * scaleAnimation = [CABasicAnimation defaultValueForKey: @ "transform.scale"]; scaleAnimation.fromValue = [NSnumber numberWithFloat: 0.0]; scaleAnimation.toValue = [NSnumber numberWithFloat: 1.0]; // configuration des propriétés scaleAnimation

CABasicAnimation * rotateAnimation = [CABasicAnimation defaultValueForKey: @ "transform.rotate"]; // propriétés rotateAnimation de configuration // ....

aniGroup.animations = [NSArray arrayWithObjects: rotateAnimation, scaleAnimation, nil];

[self.layer layoutIfNeeded]; [auto.layer addAnimation: aniGroup forKey: @ "myAnimation"];

Quelque chose comme ça .... Peut-être pas exactement copier, coller et construire-capable. ;)

Espérons que cela aide!