Comment avez-vous explicitement animer un CALayer de backgroundColor?
Je suis en train de construire un CABasicAnimation pour animer la propriété backgroundColor d'un Core Animation CALayer, mais je ne peux pas comprendre comment bien emballer un CGColorRef valeur à transmettre à l'animation. Par exemple:
CGColorSpaceRef rgbColorspace = CGColorSpaceCreateDeviceRGB();
CGFloat values[4] = {1.0, 0.0, 0.0, 1.0};
CGColorRef red = CGColorCreate(rgbColorspace, values);
CGColorSpaceRelease(rgbColorspace);
CABasicAnimation *selectionAnimation = [CABasicAnimation animationWithKeyPath:@"backgroundColor"];
[selectionAnimation setDuration:0.5f];
[selectionAnimation setToValue:[NSValue valueWithPointer:red]];
[layer addAnimation:selectionAnimation forKey:@"selectionAnimation"];
semble ne rien faire à la propriété backgroundColor, je suppose parce que de remettre un pointeur enveloppé dans un NSValue n'est pas la façon de le transmettre.
backgroundColor est un animables propriété de CALayer, donc ma question est: comment définissez-vous le Partir de ou Vers des valeurs pour cette propriété particulière (de préférence dans un Mac /iPhone indépendant de la plate-way)?
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de mettre
CGColorRef
s lors de la configuration de latoValue
oufromValue
propriétés d'unCABasicAnimation
. Utilisez simplement leCGColorRef
. Pour éviter le message d'avertissement du compilateur, vous pouvez lancer leCGColorRef
à unid
.Dans mon exemple d'application, le code suivant animé en arrière-plan rouge.
Toutefois, lorsque l'animation est terminée, l'arrière-plan renvoie à la couleur d'origine. C'est parce que le
CABasicAnimation
seulement des effets de la couche de présentation de la couche cible alors que l'animation est en cours d'exécution. Une fois l'animation terminée, la valeur définie dans le modèle de la couche de retours. Vous allez donc vous devez définir les couchesbackgroundColor
propriété de rouge ainsi. Peut-être désactiver l'implicite des animations à l'aide d'unCATransaction
.Vous pourriez vous épargner cette peine, par l'utilisation implicite de l'animation en premier lieu.
J'ai été aux prises avec ce problème jusqu'à ce que j'ai trouvé expérimentalement le barrage. Le réglage de la propriété backgroundColor de la couche, soit directement ou par l'intermédiaire de l'animation, n'aura aucun effet si vous changez la couleur d'arrière-plan par défaut (non spécifié) dans Interface Builder, dans le cadre de parcours d'un élément (comme UILabel) qui a été placé dans de l'IB. Laissez donc la couleur de fond non spécifiés et ci-dessus devrait fonctionner.