2011-10-22 2 views
1

J'ai un CAGradientLayer que je veux mettre à l'échelle pendant que l'utilisateur traîne son doigt. Cependant, lorsque je définis le cadre, le calque s'anime à la nouvelle taille. Cela se produit également avec d'autres propriétés, y compris start/endPoint.Pourquoi mon CAGradientLayer anime-t-il toutes les modifications?

Voici un exemple:

_gradient.frame = CGRectMake(0, 480-toHeight, 320, toHeight); 

Pourtant, si je l'appelle seulement quand l'utilisateur a traîné 10 ou si pixels, la couche ne saute pas simplement à la nouvelle taille, il anime une lisse, mais animation rapide facilitée. Je suis certain que ce n'est pas appelé dans un bloc d'animation. Pour déboguer davantage, j'anime également le cadre d'un UIView dans la même portée et qui ne s'anime pas.

Je suis nouveau à CALayers, alors peut-être que je fais quelque chose de mal.

+1

Pouvez-vous poster du code? – mjisrawi

+0

avez-vous enveloppé votre code à l'intérieur .. \t '[UIView beginAnimations: nil contexte: NULL];' et c'est 'commit' .. ou vous avez oublié de' commit' après l'avoir ouvert? Donc, comme @mjisrawi dit .. poster du code .. – rptwsthi

Répondre

9

La plupart des propriétés de CALayer sont animées par défaut. Vous devez désactiver ces animations implicites:

[CATransaction begin]; 
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; 
// change layer's properties 
_gradient.frame = newFrame; 
[CATransaction commit]; 

Here is a good sample pour vous aider à l'apprentissage Core Animation.

+0

génial! Thx U, l'homme! – HotJard

3

du guide de programmation Core Animation:

« Modification de la valeur d'une propriété de couche animable provoque la couche d'animer implicitement le passage de l'ancienne valeur à la nouvelle valeur. »

Donc, si vous ne voulez pas l'animation, vous devez dire iOS de ne pas animer explicitement:

[CATransaction begin]; 
[CATransaction setAnimationDuration:0.0]; 
_gradient.frame = CGRectMake(0, 480-toHeight, 320, toHeight); 
[CATransaction commit]; 

bonne chance!

Questions connexes