J'essaie de créer un swingomètre, un peu comme ceux utilisés dans les jeux de golf, où l'utilisateur tient un bouton pour démarrer une balançoire, libère à l'apex pour déterminer la puissance , à quel point le «swing» inverse la direction, et l'utilisateur tape à nouveau sur la descente pour régler la précision.Création d'un Swingometer sur l'iPhone en utilisant Core-Animation
Plutôt que d'avoir une barre qui se remplit, j'aimerais utiliser un pendule qui oscille de gauche à droite. Le pendule laisse une marque où il est d'abord tapé (puissance) et une autre marque où il est tapé pour la deuxième fois (précision).
Mon premier problème est la rotation du pendule. J'ai lu ces messages au sujet de la rotation d'un UIImageView - here, here et here mais j'espérais que je pourrais être en mesure d'obtenir un peu de conseils supplémentaires :)
Tout d'abord, est la rotation d'un UIImageView la meilleure façon d'aborder ce? Je pensais déterminer à quel point le pendule est proche du bon endroit en comparant ses coordonnées aux coordonnées du point correct. Mais pour que cela fonctionne, UIImageView devrait bouger physiquement, ce dont je ne suis pas sûr? De même, comment faire en sorte que UIImageView tourne autour d'un point spécifique, plutôt que du point central. Ou devrais-je simplement agrandir la boîte englobante du pendule afin que le point central soit dans la bonne position. Et comment puis-je laisser un «tampon» où l'utilisateur frappe (ou libère) le bouton?
Toute aide générale au sujet de la meilleure façon d'aborder ce serait très apprécié :) Peut-être que ma question est un peu vague et généralisée, mais je suis en espérant que quelqu'un pourrait aimer le défi :)
Merci !!
Michael
MISE À JOUR:
Ok j'ai essayé les deux approches suivantes, les deux qui travaillent maintenant.
- (void)viewDidLoad {
pendulum.image = [UIImage imageNamed:@"winkOpen.png"];
[self swingPendulum];
}
- (void)swingPendulum {
CABasicAnimation *rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.toValue = [NSNumber numberWithFloat:degreesToRadian(180)];
rotationAnimation.duration = 0.75;
rotationAnimation.repeatCount = 1.0;
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
[pendulum.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
}
/*
- (void)swingPendulum {
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1];
pendulum.transform = CGAffineTransformMakeRotation(degreesToRadian(180));
[UIView setAnimationDelegate:self];
[UIView commitAnimations];
}
*/
Maintenant, je ne suis pas sûr quelle approche est la meilleure, mais avec la première, les oscillations d'un pendule au-dessus de 0 degrés plutôt que ci-dessous, donc je vais avec ça.
Maintenant, j'ai besoin de déterminer où le pendule s'arrête et inverser le swing ... Mais peut-être que je vais les poster comme des questions distinctes, car cela devient un peu encombré! Je ferai en sorte que mes questions soient plus précises à l'avenir :)
J'ai pensé "Swingometer", ça sonne intéressant! Puis j'ai lu la question et j'ai découvert qu'il s'agissait de golf. Soupir. Parlez d'une déception. – TechZen
Eh bien, en fait, je ne l'utilise pas pour un jeu de golf, je pensais juste que c'était un exemple qui décrirait le plus précisément le problème.C'est intéressant, je le promets :) – Smikey
Ces erreurs de "symboles non définis" que vous voyez sont dues au fait que vous ne liez pas le framework QuartzCore (qui contient les classes Core Animation et les types de données). En outre, en pratique, comment l'utilisateur verra-t-il réellement l'écran pendant qu'il se balance? –