Formation PUB900 : Développer une application pour iPhone avec SwiftUI, H-2024 Les capteurs

54.3 Travailler avec l'attitude (tangage, roulis, lacet))


Pour obtenir l'orientation du téléphone dans l'espace (attitude), la bibliothèque Core Motion combine les données du gyroscope et de l'accéléromètre.

Les données sur l'attitude sont disponibles à partir de la classe CMMotionManager. Cette classe peut également fournir d'autres données, par exemple l'accélération, la rotation et la position par rapport au nord magnétique.

Voici les étapes à réaliser pour accéder aux données sur l'attitude.

  1. Importez la bibliothèque CoreMotion.
    SwiftUI

    import CoreMotion

  2. Instanciez un objet de type CMMotionManager. Selon la structure de votre code, l'appel au constructeur peut être réalisé :
    • lors de la déclaration d'une propriété dans le ContentView
    • ou mieux : lors de la déclaration d'une propriété dans une classe observable qui gère les données captées (dans ce cas, la variable sera privée et ne sera pas observable)

    Gardez en tête qu'une application mobile ne doit avoir qu'une instance de CMMotionManager sans quoi, il pourrait y avoir de la latence dans la réception des informations.

    SwiftUI

    var cmMotionManager = CMMotionManager()

  3. Dans le .onAppear() à l'intérieur du ContentView OU dans le constructeur de la classe qui gère les données captées, vérifiez si les capteurs requis sont disponibles sur l'appareil mobile.
    SwiftUI

    if cmMotionManager.isDeviceMotionAvailable {
      ...
    }

  4. Si les capteurs sont disponibles, initialisez la fréquence à laquelle vous désirez obtenir des informations. Cette fréquence est donnée en secondes.
    SwiftUI

    cmMotionManager.deviceMotionUpdateInterval = 0.03

    Note : l'intervalle doit être compris entre les valeurs maximale et minimale acceptées pour l'appareil mobile. Si vous fournissez une valeur en dehors de la plage valide, SwiftUI utilisera la valeur valide la plus proche.
  5. Vous pouvez maintenant lancer la lecture et réagir en cas d'erreur. Les valeurs retournées par le capteur seront stockées dans des variables d'état OU dans des propriétés observables de la classe qui gère les données captées (il faudra à ce moment faire précéder leur nom par self.).
    SwiftUI

    cmMotionManager.startDeviceMotionUpdates(to: .main) { (data, error) in
      if let error {
        print("Erreur de capture : \(error.localizedDescription)")
        return
      }

      // s'il y a des données à traiter
      if let attitude = data?.attitude {
        pitch = attitude.pitch
        roll = attitude.roll
        yaw = attitude.yaw
      }
    }

  6. Au besoin, arrêtez la lecture des valeurs du capteur.
    SwiftUI

    cmMotionManager.stopDeviceMotionUpdates()

 

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre