J'ai un CALayer pour animer une modification de son contenu d'image. Maintenant, comment puis-je changer le temps qu'il faut pour que cette animation ait lieu?Modifier le temps d'animation pour les propriétés d'un CALayer
8
A
Répondre
7
C'est plus ou moins simple. Vous avez un ivar CALayer *yourLayer
. Ensuite, vous définissez le délégué et mettre en œuvre la méthode déléguée -(id<CAAction>)actionForLayer:forKey:
- (void)awakeFromNib {
yourLayer.delegate = self;
yourLayer.name = @"yourLayer";
}
- (id <CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event {
if([layer.name isEqualToString yourLayer.name]) { // Check for right layer
CABasicAnimation *ani = [CABasicAnimation animationWithKeyPath:event]; // Default Animation for 'event'
ani.duration = .5; // Your custom animation duration
return ani;
} else return nil; // Default Animation
}
10
Une autre façon de le faire:
[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:2.5f] forKey:kCATransactionAnimationDuration];
//Perform CALayer actions, such as changing the layer contents, position, whatever.
aCALayerObject.contents = [self newCALayerContents];
[CATransaction commit];
Ce code serait animer le changement du contenu du CALayer plus de 2,5 secondes. Vous pouvez également l'utiliser pour désactiver complètement toutes les animations. Comme ceci:
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
19
Vous pouvez simplement appeler:
[CATransaction setAnimationDuration:durationSecs]
dans -layoutSublayers ou nulle part ailleurs que vous modifiez les couches et attendre à ce qu'ils animent implicitement. Cela affectera la transaction implicite actuelle et toutes les sous-transactions dans celle-ci.
D'où puis-je obtenir l'objet 'CATransaction'? –
'' 'CATransaction''' est une classe. '' 'setAnimationDuration: seconds''' est une méthode de classe. Dans ce cas, il définit la durée de la transaction en cours. –
Merci, je l'ai maintenant. –