Vidéo: Tous les gestes / astuces de l'iPhone 11/11 pro/11 pro Max/ X/X?/X? Max/X? en 5 minutes ! 2025
Ici, vous découvrez comment faire pivoter une vue (dans ce cas, faites tourner la voiture) dans votre application iOS. Pour ce faire, vous mettez à jour le code de rotation avec lequel vous avez démarré et le remplacez par le code en gras.
- (void) rotate { CGAffineTransform transformation = CGAffineTransformMakeRotation (M_PI); void (^ animation) () = ^ () { moi-même. voiture . transformer = transformer; }; void (^ completion) (BOOL) = ^ (BOOL terminé) { [self returnCar]; }; [UIView animateWithDuration: 3 animations: achèvement de l'animation: achèvement]; }
Cette méthode utilise les déclarations de blocs.
La structure de données CGAffineTransform représente une matrice utilisée pour transformations affines - un modèle de correspondance entre les points d'un système de coordonnées et les points d'un autre système de coordonnées. Bien que CGAffineTransform ait un certain nombre d'utilisations (telles que la mise à l'échelle et la traduction d'un système de coordonnées), la seule méthode couverte ici est la méthode de rotation utilisée dans le Listing 10-3:
CGAffineTransformMakeRotation (M_PI)
vous spécifiez l'angle (en radians) pour faire pivoter les axes du système de coordonnées. Alors que les degrés sont des nombres entre 0 et 360, les radians, bien que similaires, vont de 0 à 2π. Donc, quand vous créez une rotation qui tourne un objet autour d'un demi-cercle, cette rotation en radians est pi. (M_PI est une constante système qui représente pi.)
Juste pour rendre votre vie intéressante, vous devriez noter que dans iOS, positif est antihoraire, mais sur Mac OS X, positif est dans le sens des aiguilles d'une montre.
Le résultat final du Listing 10-3 est que la voiture va tourner de 180 degrés en trois secondes, et quand c'est fait, vous envoyez le message returnCar dans le gestionnaire de complétion.
Pour remettre la voiture dans sa position d'origine, ajoutez le code en gras au talon de la méthode returnCar dans TestDriveController. m.
- (void) returnCar { Centre CGPoint = CGPointMake (auto-centrage x, auto-portrait, taille, hauteur - auto-frame. hauteur de taille ); void (^ animation) () = ^ () { auto. voiture . centre = centre; }; void (^ completion) (BOOL) = ^ (BOOL terminé) { [self continueRotation]; }; [UIView animateWithDuration: 3 animations: animation achèvement: achèvement]; }
Cette approche est à peu près la même que celle de la méthode testDrive sauf que le nouveau centre est arbitrairement placé à 600 points en dessous de l'endroit où la voiture tourne. Vous remettez le centre en calculant le bas de la vue
self. vue. Cadre. Taille. hauteur - soi.voiture. Cadre. Taille. la taille);
Vous pouvez expérimenter avec ces formules pour voir comment déplacer la voiture autour de la vue.
Mais vous n'avez pas encore fini. Vous devez ramener la voiture à sa position d'origine (à moins que vous ne vouliez conduire en sens inverse de la Californie à New York). Ajoutez le code en gras au talon de la méthode continueRotation dans TestDriveController. m.
- (void) continueRotation { CGAffineTransform transform = CGAffineTransformMakeRotation (0); void (^ animation) () = ^ () { moi-même. voiture . transformer = transformer; }; [UIView animateWithDuration: 3 animations: animation completion: NULL]; }
Vous devez comprendre que la transformation (dans ce cas, une rotation de vue) est toujours là; c'est-à-dire que vous avez créé une transformation pour faire pivoter la voiture de 180 degrés. Si vous voulez ramener la voiture à la position d'origine, vous devez renvoyer la transformation à 0.
