Vidéo: 10 applications gratuites pour regarder des films, séries, chaines TV, Anime Japonais etc 2025
Ce serait bien de pouvoir glisser une voiture et de la placer n'importe où sur l'écran de votre application iOS. Ici, vous découvrirez comment coder pour faire glisser un objet, ainsi que la façon dont les touches fonctionnent sur un appareil iOS.
Le toucher d'un doigt (ou sa levée de l'écran) ajoute un événement tactile à la file d'attente des événements de l'application, encapsulée (contenue) dans un objet UIEvent. Un objet UITouch existe pour chaque doigt touchant l'écran, ce qui vous permet de suivre les touches individuelles.
La touche touchesBegan: withEvent: le message est envoyé lorsqu'un ou plusieurs doigts touchent une vue. Ce message est une méthode de la superclasse de TestDriveController, UIResponder, à partir de laquelle le contrôleur de vue est dérivé.
Pendant que l'utilisateur continue de toucher l'écran avec ses doigts, le système signale les modifications pour chaque doigt dans l'objet UITouch correspondant, envoyant ainsi le message touchesMoved: withEvent:. La touche touchEnded: withEvent: le message est envoyé lorsqu'un ou plusieurs doigts sont extraits de la vue associée. Le contact touchesCancelled: withEvent: d'autre part, un message est envoyé lorsqu'un événement système (tel qu'un avertissement de mémoire faible) annule un événement tactile.
Dans cette application, vous devez être concerné uniquement par les deux premières méthodes que vous venez de décrire.
Pour commencer le processus de réponse à un événement tactile, ajoutez une nouvelle variable d'instance (en gras) à TestDriveController. m fichier d'implémentation.
@interface TestDriveController () {AVAudioPlayer * backgroundAudioPlayer; SystemSoundID burnRubberSoundID; BOOL touchInCar; } -d
Ensuite, ajoutez la méthode touchesBegan: à TestDriveController. m pour commencer à suivre les contacts. (Vous êtes en train de surcharger cette méthode car UIViewController en a hérité de la classe de base UIResponder.)
- (void) touchesBegan: (NSSet *) touche avecEvent: (UIEvent *) event {UITouch * touch = [touche n'importe quel objet]; if (CGRectContainsPoint (auto.car.base, [touch locationInview: vue autonome])) touchInCar = YES; else {touchInCar = NO; [super touchesBegan: touche withEvent: event];}}
Comme mentionné précédemment, le message touchesBegan: withEvent: est envoyé lorsqu'un ou plusieurs doigts touchent une vue. Les touches elles-mêmes sont transmises à la méthode dans un objet NSSet - une collection non ordonnée d'éléments distincts.
Pour accéder à un objet dans NSSet, utilisez la méthode anyObject - elle renvoie l'un des objets de l'ensemble. Pour notre propos ici, vous assumez un seul objet - mais vous pourriez vouloir explorer ce problème par vous-même afin de comprendre comment gérer des possibilités supplémentaires.
Le code suivant montre comment configurer la méthode anyObject:
UITouch * touch = [touche anyObject];
Ensuite, demandez au code de déterminer si l'événement tactile de l'utilisateur se trouve dans la vue Car (UIImage):
if (CGRectContainsPoint (self.voiture. cadre, [touch locationInView: auto. view]))
CGRectContainsPoint est une fonction qui renvoie YES lorsqu'un rectangle (coordonnées de vue) contient un point. Vous spécifiez le cadre de la voiture comme rectangle:
self. voiture. frame
et vous spécifiez le point en envoyant le message locationInView: au toucher:
locationInview: self. view
locationInView: renvoie l'emplacement actuel du récepteur dans le système de coordonnées de la vue donnée. Dans ce cas, vous utilisez la vue principale, mais vous souhaiterez peut-être modifier l'affichage si vous tentez de déterminer l'emplacement dans une autre vue, par exemple. Peut-être que l'utilisateur touche une pédale d'essence itty-bitty.
S'il est déterminé que le contact se trouve dans la voiture, affectez YES à la variable d'instance touchInCar; Si ce n'est pas le cas, vous attribuez NON et transférez le message dans la chaîne du répondeur. Vous utilisez plus tard TouchInCar pour déterminer si l'utilisateur fait glisser la voiture ou passe son doigt sur l'écran.
L'implémentation par défaut de touchesBegan: ne fait rien. Cependant, les sous-classes dérivées directement de UIResponder, en particulier UIView, transmettent le message à la chaîne répondeur. Pour transférer le message au répondeur suivant, envoyez le message à super (l'implémentation de la superclasse).
Si vous surchargez touchesBegan: withEvent: sans appeler super (un modèle d'utilisation commun), vous devez également remplacer les autres méthodes de gestion des événements tactiles, si ce n'est que des implémentations stub (vides).
Les touches multiples sont désactivées par défaut. Pour permettre à votre application de recevoir plusieurs événements tactiles, vous devez définir la propriété multipleTouchEnabled de l'instance de vue correspondante sur YES.
Lorsque les utilisateurs déplacent joyeusement la voiture autour de l'écran (en leur disant peut-être zoom zoom ), votre application reçoit en permanence le message touchesMoved:. Ajoutez le code dans l'extrait 10-13 à TestDriveController. m pour remplacer cette méthode, ce qui vous permettra de déplacer la voiture à l'endroit où se trouve le doigt de l'utilisateur.
- (void) touchesMoved: (NSSet *) touche avecEvent: (UIEvent *) event {if (touchInCar) {UITouch * touch = [touche n'importe quel objet]; soi. voiture. center = [touche positionInView: auto. view];} else [super touchesMoved: touche withEvent: event];}
Si le premier contact était dans la vue Car (TouchInCar est YES), vous affectez la propriété du centre de la voiture à la coordonnée tactile. Lorsque vous affectez une nouvelle valeur à la propriété center, l'emplacement de la vue est immédiatement modifié. Sinon, vous ignorez le toucher et transférez le message vers le haut de la chaîne du répondeur.
Il est intéressant d'observer que lorsque vous positionnez la voiture à côté d'un bouton, elle passe sous ce bouton lorsque vous appuyez sur le bouton Test Drive. Cette fonctionnalité illustre la structure de la sous-vue.
Expérimentez en déplaçant la voiture et en utilisant le bouton Test Drive. S'il y a quelque chose qui ne va pas avec vos formules pour positionner la voiture pendant le Test Drive, vous le verrez quand la voiture partira d'un endroit différent.
