Comment Avez-Vous CAKeyframeAnimation Échelle?
Je veux créer une animation avec plusieurs images clés. Je veux que ma Couche (un bouton dans ce cas)
à l'échelle jusqu'à 1,5 puis vers le bas à 0,5, alors jusqu'à 1,2 puis vers le bas à 0,8 ensuite 1.0.
Je tiens également à Vitessedébut et Vitessefin de chaque image-clé.
Comme vous pouvez l'imaginer, cela va créer un Élastique/Bounce effet sur le spot.
Dans d'autres parties de mon application j'ai été en utilisant CAKeyframeAnimation comme ceci (voir code ci-dessous).
Cela crée un semblable élastique de l'animation, mais pour la position x et y.
Puis-je adapter le code ci-dessous à sur l'échelle au lieu de la position?
Vous en remercie d'avance!
- (CAAnimation*)monInAnimation {
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path,NULL,113,320);
CGPathAddLineToPoint(path, NULL, 113.5, 283);
CGPathAddLineToPoint(path, NULL, 113.5, 179);
CGPathAddLineToPoint(path, NULL, 113.5, 207);
CGPathAddLineToPoint(path, NULL, 113.5, 187);
CGPathAddLineToPoint(path, NULL, 113.5, 199);
CGPathAddLineToPoint(path, NULL, 113.5, 193);
CGPathAddLineToPoint(path, NULL, 113.5, 195);
CGPathAddLineToPoint(path, NULL, 113.5, 194);
CAKeyframeAnimation *
animation = [CAKeyframeAnimation
animationWithKeyPath:@"position"];
[animation setPath:path];
[animation setDuration:1.5];
[animation setCalculationMode:kCAAnimationLinear];
NSArray *arr = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:0.12],
[NSNumber numberWithFloat:0.24],
[NSNumber numberWithFloat:0.36],
[NSNumber numberWithFloat:0.48],
[NSNumber numberWithFloat:0.60],
[NSNumber numberWithFloat:0.72],
[NSNumber numberWithFloat:0.84],
[NSNumber numberWithFloat:1.0],nil];
[animation setKeyTimes:arr];
[animation setTimingFunctions:[NSArray arrayWithObjects:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn],
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut],
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], nil]];
//[animation setAutoreverses:YES];
CFRelease(path);
return animation;
}
- (void)monBtnIn {
[monButton.layer setPosition:CGPointMake(113.5,194)];
[monButton.layer addAnimation:[self monInAnimation]
forKey:@"position"];
}
OriginalL'auteur Jonathan | 2010-01-04
Vous devez vous connecter pour publier un commentaire.
Deux solutions pour vous:
Tout d'abord, Vous pouvez également animer la transformation de la propriété.
À l'aide de Brad code, mais à l'aide de @"transformer" pour le chemin d'accès clé. Le principal avantage étant que vous n'avez pas à calculer le cadre réel, mais au lieu de fournir un simple facteur d'échelle:
Objective-C:
Swift 4:
Deuxième, et probablement plus facile, est à l'aide de FTUtils, open source wrapper de base de l'animation. Il comprend un stock "élastique" de l'animation.
Vous pouvez l'obtenir:
http://github.com/neror/ftutils
Vous pouvez simplement utiliser des nombres en utilisant chemin d'accès clé comme "transformer les.l'échelle". N'est-ce pas ?
OriginalL'auteur Corey Floyd
transform.scale
, n'importe qui?Totalement indépendants, si tu vas utiliser des flotteurs dans les valeurs de tableau, vous devez les ajouter en tant que
NSNumbers
, sinon on venait de finir comme 0s!rotationMode = kCAAnimationRotateAuto
. À l'aide de "transformer.l'échelle" des valeurs de la déclaration de plus simple ainsi. Merci beaucoup.OriginalL'auteur Mazyod
Plutôt que de définir le chemin d'accès de votre CAKeyframeAnimation, vous devrez définir les images elles-mêmes. J'ai créé un "pop-in" effet avant par l'animation de la taille de l'limites d'un calque:
où POPINOVERSHOOTPERCENTAGE est la fraction par laquelle je voulais un dépassement de la cible de la taille de la couche.
OriginalL'auteur Brad Larson
Je ne sais pas si vous pouvez utiliser un CAKeyframeAnimation pour animer l'échelle d'une UIView, mais vous pouvez le faire avec un CABasicAnimation et le réglage de la fromValue et toValue propriétés, et en les utilisant pour animer la propriété transform:
Jetez un oeil à la CAAnimationGroup classe. Il hérite de CAAnimation, et avec elle, vous pouvez "chaîne" personne CABasicAnimations, chacune avec sa propre fromValue et toValue. Cela pourrait-il être ce que vous recherchez?
Scratch, j'ai vérifié les docs et il semble que des animations dans une CAAnimationGroup sont exécutées simultanément, et non pas l'un après l'autre. La poisse. Vous devez définir des délégués pour vos animations, et le début d'une nouvelle animation lorsque le précédent est terminé.
OriginalL'auteur Adrian Kosmaczewski