View in English

  • Global Nav Open Menu Global Nav Close Menu
  • Apple Developer
Search
Cancel
  • Apple Developer
  • News
  • Discover
  • Design
  • Develop
  • Distribute
  • Support
  • Account
Only search within “”

Quick Links

5 Quick Links

Vidéos

Ouvrir le menu Fermer le menu
  • Collections
  • Sujets
  • Toutes les vidéos
  • À propos

Retour à WWDC25

  • À propos
  • Résumé
  • Transcription
  • Code
  • Amélioration de l’expérience photo avec les commandes de capture

    Apprenez à personnaliser les commandes de capture dans vos expériences caméra. Nous vous montrerons comment prendre des photos avec toutes les commandes de capture physique, y compris la prise en charge des nouveaux AirPods, et comment ajuster les réglages grâce à Camera Control.

    Chapitres

    • 0:00 - Introduction
    • 2:51 - Capture physique
    • 3:01 - Gestion des évènements
    • 6:39 - Capture à distance AirPods
    • 10:00 - Commande de l’appareil photo

    Ressources

    • Accessing the camera while multitasking
    • AVFoundation
    • AVMultiCamPiP: Capturing from Multiple Cameras
    • Capture setup
    • Capturing Photos with Depth
    • Creating a camera experience for the Lock Screen
    • Creating a camera extension with Core Media I/O
    • DockKit
    • Forum: Photos & Camera
    • Scanning data with the camera
    • Supporting Continuity Camera in your macOS app
    • Supporting Continuity Camera in your tvOS app
      • Vidéo HD
      • Vidéo SD

    Vidéos connexes

    WWDC24

    • Build a great Lock Screen camera capture experience

    WWDC23

    • Discover Continuity Camera for tvOS
    • Support external cameras in your iPadOS app
  • Rechercher dans cette vidéo…

    Bonjour, je m’appelle Vitaliy. Je suis ingénieur pour l’équipe AVKit. Bienvenue dans « Amélioration de l’expérience photo avec les commandes de capture ». Lors de cette session, nous découvrirons de nouvelles façons d’améliorer les interactions utilisateur dans votre app. Les commandes de capture permettent d’associer les gestes sur des boutons physiques à des actions d’appareil photo, rappelant l’utilisation de l’app photo iOS native. Nous verrons aussi une nouvelle fonctionnalité d’iOS 26 qui devrait beaucoup vous plaire.

    Pour illustrer la puissance des commandes de capture, utilisons l’app photo sur iOS. Au lieu de prendre une photo avec le bouton de l’interface utilisateur à l’écran, utilisons les boutons physiques du téléphone.

    D’un simple clic sur le bouton d’augmentation du volume, nous pouvons lancer la capture.

    Mais cette API ne se limite pas aux simples clics. Elle prend aussi en charge les pressions longues. Par exemple, en mode appareil photo, en appuyant sur le bouton de réduction du volume et en le maintenons enfoncé, l’enregistrement vidéo démarre.

    Les commandes de capture donnent ainsi aux utilisateurs une plus grande liberté d’utilisation de l’appareil photo pour capturer des temps forts avec leur iPhone.

    Dans cette session, nous verrons d’abord ce qu’est une capture physique et quels boutons physiques sont pris en charge. Ensuite, nous montrerons comment exploiter l’API dans votre app pour gérer les interactions utilisateur et créer une interface d’appareil photo robuste et réactive comme celle de la démo. Nous présenterons aussi la nouvelle fonctionnalité iOS 26 de contrôle à distance de l’appareil photo avec les AirPods.

    Enfin, mon collègue Nick donnera un aperçu de Camera Control sur l’iPhone 16.

    Avant d’explorer les fonctionnalités de base de l’API, voyons les principaux frameworks liés à la création d’une expérience photo optimale dans iOS. Au cœur de l’architecture de l’app photo se trouve AVFoundation, offrant la fonctionnalité de capture de bas niveau via des API comme AVCapturePhotoOutput pour la photo et AVCaptureMovieFileOutput pour la vidéo.

    Pour combiner la couche d’interface utilisateur avec AVFoundation, AVKit repose sur ces frameworks.

    AVCaptureEventInteraction est une API spécifique à la capture fournie avec AVKit.

    Voyons maintenant les caractéristiques et fonctionnalités clés d’AVCaptureEventInteraction. Cette API permet de modifier le comportement par défaut des boutons physiques tels que l’augmentation ou la réduction du volume, ou Camera Control lancé avec l’iPhone 16.

    Un autre bouton pris en charge par AVCaptureEventInteraction est le bouton Action. Regardez la session de l’année dernière sur la configuration du bouton Action pour la capture.

    Chaque pression sur un bouton physique déclenche une notification d’événement de capture. Elle inclut une phase d’événement, qui vous permet de contrôler précisément le cycle de vie de la pression. Il existe trois phases possibles : began : pour le moment où le bouton est enfoncé. Parfait pour préparer l’objet appareil photo de votre app.

    cancelled : pour les moments où l’app passe en arrière-plan ou la capture n’est pas disponible.

    ended : pour le moment où le bouton est relâché. Il s’agit de la phase où l’objet appareil photo doit lancer la capture.

    AVCaptureEventInteraction vous permet également de distinguer les pressions sur les boutons entre les actions principales et secondaires. Une pression sur un bouton déclenche une notification de capture qui n’est envoyée qu’à son gestionnaire désigné.

    Les actions principales sont déclenchées par le bouton de réduction du volume, le bouton Action et Camera Control. L’action secondaire est déclenchée par le bouton d’augmentation du volume. Un même bouton ne peut pas déclencher les deux gestionnaires, car ils sont conçus pour représenter des actions distinctes. Le gestionnaire secondaire est facultatif. S’il n’est pas spécifié, le clic d’augmentation du volume déclenche l’action principale. Cette conception rend votre app modulaire et vous laisse plus de liberté pour améliorer l’expérience photo des utilisateurs. Cette API est destinée aux cas d’utilisation de capture. Le système n’envoie les événements de capture qu’aux apps qui utilisent activement l’appareil photo. L’adoption de cette API remplace le comportement par défaut des boutons physiques. Les apps doivent donc toujours répondre de manière appropriée aux événements reçus. Si vous ne gérez pas les événements, le bouton ne sera pas fonctionnel, et l’expérience utilisateur en pâtira.

    Les apps de capture en arrière-plan ou celles sans session AVCaptureSession active ne reçoivent aucun événement. Toute pression sur un bouton déclenche son action système par défaut, telle que le réglage du volume ou le lancement de l’appareil photo.

    Bien qu’AVCaptureEventInteraction soit une API conçue spécifiquement pour UIKit, les développeurs de SwiftUI peuvent accéder à ses fonctionnalités via le modificateur de vue onCameraCaptureEvent. Le comportement est le même, quelle que soit l’approche adoptée.

    Maintenant que nous connaissons AVCaptureEventInteraction, créons une app photo utilisant le modificateur de vue SwiftUI onCameraCaptureEvent pour prendre des photos avec des boutons physiques. Commençons par créer l’interface utilisateur de l’app photo. Incluons CameraView qui est responsable de l’affichage de la sortie de l’appareil photo à l’écran.

    Puis, ajoutons un bouton à la vue pour permettre à l’utilisateur de prendre des photos. Connectons ce bouton au CameraModel pour qu’une photo soit prise lorsque l’utilisateur appuie dessus.

    Maintenant, nous avons une vue fonctionnelle qui prend des photos lorsque l’utilisateur appuie sur le bouton à l’écran. Cependant, n’importe quel bouton physique peut déclencher des actions système. Faisons en sorte que ces pressions sur les boutons physiques soient spécifiques à l’appareil photo avec l’API que nous avons mentionnée. Commençons par importer le framework AVKit. Attachons ensuite le modificateur de vue onCameraCaptureEvent à CameraView et si la phase d’événement est « ended », nous prendrons une photo.

    Un jeu d’enfant ! Avec juste 6 lignes de code supplémentaires, nous avons activé les mêmes interactions intuitives sur les boutons physiques pour prendre des photos que celles de l’app photo intégrée. C’est là toute la puissance de l’API Capture Controls. Nous sommes ravis d’annoncer que cette année, AVCaptureEventInteraction prendra aussi en charge les actions principales déclenchées par des clics sur la tige des AirPods, en particulier ceux équipés de la puce H2. Cela permettra à l’utilisateur de capturer à distance des temps forts sans avoir besoin d’interagir avec son téléphone.

    Pour ceux qui ont déjà adopté l’API, cette fonctionnalité est gratuite avec iOS 26.

    Voyons maintenant cette nouvelle fonctionnalité en action. D’abord, je mets l’AirPod droit, puis celui de gauche.

    Quelle élégance !

    Puis, pour configurer les AirPods pour la capture, accédons à la section « Capture photo à distance de l’appareil » dans les réglages.

    Choisissons quel type de clic déclenchera la capture. Je choisis l’option « Appuyer une fois ».

    Revenons dans l’app photo.

    Je vais reculer de quelques pas et prendre une photo en cliquant sur l’une des tiges.

    Super, je peux maintenant contrôler l’appareil photo sans toucher l’appareil.

    Comme les AirPods sont utilisés pour le contrôle à distance de l’appareil photo, le retour audio est crucial, car les utilisateurs peuvent ne pas voir l’écran pendant la capture mais avoir besoin d’une confirmation que leur commande a été reconnue.

    C’est pourquoi nous ajoutons une nouvelle API de contrôle de la lecture sonore, en particulier pour les clics sur les tiges d’AirPod. Si un événement de capture est déclenché par autre chose qu’un clic sur l’AirPod, l’objet AVCaptureEventInteraction ne permet pas de contrôler le retour sonore.

    Pour fournir cette nouvelle fonctionnalité aux utilisateurs d’AVCaptureEventInteraction sans impliquer d’efforts supplémentaires, nous avons ajouté une tonalité par défaut pour les clics sur les AirPods.

    Cependant, ce son peut ne pas convenir à votre cas d’utilisation. Vous pouvez donc en personnaliser la lecture en fournissant votre propre son dans le lot de l’app.

    Revenons à l’app photo, notamment au modificateur de vue .onCameraCaptureEvent. Dans iOS 26, si nous ne modifions pas ce code, l’utilisateur entend le son par défaut quand il clique sur sa tige AirPod. Comme nous créons une app spécialement conçue pour prendre des photos, il se peut que le son par défaut ne soit pas adapté à l’app.

    Pour régler le son de capture pour notre scénario spécifique, désactivons d’abord le son par défaut à l’aide du paramètre defaultSoundDisabled.

    Si un retour audio est nécessaire, nous lisons le son cameraShutter en utilisant la méthode playSound sur l’objet événement. Notez que la propriété shouldPlaySound ne sera true que si l’action de capture a été déclenchée par un clic sur une tige AirPod.

    En résumé, l’API AVCaptureEventInteraction simplifie considérablement le processus de création d’expériences photo de haute qualité pour vos apps. Nous avons vu les principales fonctionnalités et bonnes pratiques de mise en œuvre de l’API, y compris la mise à jour de cette année : un moyen de contrôler la prise de photo en cliquant sur une tige de l’AirPod. Cédons la parole à Nick pour en savoir plus sur AVCaptureControls. Bonjour, je m’appelle Nick Lupinetti. Je suis ingénieur logiciel au sein de l’équipe Camera Experience et je vais vous présenter AVCaptureControl, un moyen puissant de convertir Camera Control sur iPhone 16 en interface matérielle pour prendre des photos. Camera Control est un outil de capture polyvalent qui permet de cliquer pour lancer une app photo, agir comme déclencheur et effectuer des ajustements rapides, tout en laissant le doigt au même endroit.

    Prenons ces trois fonctions dans l’ordre, en commençant par le lancement. Pour lancer votre app, Camera Control doit y avoir accès même lorsque l’appareil est verrouillé. Cela nécessite la création d’une extension de capture sur l’écran verrouillé. Pour en savoir plus, consultez la session de l’année dernière consacrée à la création d’une expérience photo avec un écran verrouillé.

    Ensuite, vous pourrez facilement utiliser Camera Control comme déclencheur pour votre app. Il suffit de configurer l’une des API d’événements de capture que Vitaliy vous a montrées, et le tour est joué ! Camera Control exécute le même rappel d’événement principal que celui que vous avez déjà fourni pour les boutons de volume. Passons à ma partie préférée : ajuster les réglages de l’appareil photo. Camera Control prend en charge les pressions légères, comme sur un obturateur d’appareil photo traditionnel, qui active un aperçu net pour se concentrer sur la composition, et présente un réglage à ajuster en faisant glisser la commande. D’autres paramètres peuvent être sélectionnés par deux pressions légères, puis en faisant glisser Camera Control et en appuyant à nouveau légèrement pour confirmer.

    Au niveau le plus élevé, il existe deux types de contrôles : les curseurs pour les valeurs numériques et les sélecteurs pour les éléments d’une liste.

    Il existe aussi deux types de curseurs : continu et distinct.

    Les curseurs continus peuvent sélectionner n’importe quelle valeur numérique dans une plage spécifiée. Par exemple, iOS est fourni avec un curseur de zoom continu. Il prend en charge toute la gamme de facteurs de zoom entre le minimum et le maximum recommandés pour l’appareil utilisé. Les curseurs distincts sélectionnent également des valeurs numériques : soit à partir d’un ensemble explicite que vous fournissez, soit par étapes fixes d’une valeur à une autre. iOS offre un curseur distinct intégré pour contrôler le biais d’exposition, avec des incréments d’un tiers entre plus ou moins deux, qui sont des unités gérables de la photographie traditionnelle.

    Les sélecteurs, comme les curseurs distincts, permettent des sélections finies, mais sont indexés. Chaque index correspond à un état nommé pour la commande, comme « Activé » et « Désactivé » pour le flash, ou à des noms de styles photographiques dans l’app photo. Maintenant que nous comprenons les différents types de commandes, voyons les classes qui les implémentent. Les commandes sont définies dans le framework AVFoundation. AVCaptureControl est la classe de base abstraite dont héritent les autres.

    Il existe deux sous-classes définies par le système, qui permettent aux apps d’adopter le même comportement que l’app photo intégrée pour le zoom ou le biais d’exposition. Enfin, il existe deux sous-classes génériques, pour les curseurs, à la fois continus et distincts, et des sélecteurs, dont vous pouvez définir vous-même le comportement. Pour adopter des commandes dans votre app, vous devez les ajouter à une AVCaptureSession. Habituellement, la première étape de configuration d’une session consiste à créer un appareil de capture et à l’ajouter à la session encapsulée en tant qu’entrée. Ensuite, toutes les commandes définies par le système sont créées, avec une référence à cet appareil pour qu’elles pilotent ses propriétés en votre nom. Toutes les commandes avec des comportements définis par l’app sont également créés à ce moment-là, puis chaque commande est ajoutée à la session.

    Pour que votre app réagisse lorsqu’un utilisateur interagit avec Camera Control, vous devez prendre en compte plusieurs flux. Les commandes fournies par le système appliquent les valeurs de Camera Control directement à l’appareil configuré. Vous n’avez pas besoin de définir videoZoomFactor ou exposureTargetBias vous-même.

    Mais vous devrez peut-être mettre à jour des modèles ou l’interface utilisateur. Si vous utilisez l’observation clé-valeur, ou KVO, pour savoir quand la propriété appropriée change, vous pouvez continuer à utiliser ce mécanisme pour mettre à jour l’interface.

    Sinon, créez la commande système avec un gestionnaire d’actions, qui sera appelé sur le thread principal lorsque la valeur change, afin de pouvoir mettre à jour l’interface utilisateur directement.

    Les commandes définies par l’app sont toujours créées avec un rappel d’action, exécuté sur une file d’attente que vous spécifiez. Si votre commande doit piloter les paramètres de capture, vous pouvez le faire de manière synchrone en spécifiant la file d’attente dans laquelle vous gérez cet état. Ensuite, vous pouvez mettre à jour l’interface utilisateur dans la file d’attente principale.

    Voilà. Nous sommes prêts à adopter Camera Control dans l’app que je crée avec Vitaliy. Comme il a ajouté une interaction de capture, la commande déclenche déjà la prise de photos, sans aucun code supplémentaire.

    J’aimerais permettre le zoom avant et arrière avec Camera Control. Je vais donc ajouter cette fonctionnalité.

    Voici où nous configurons notre session de capture pour utiliser un appareil. Vérifions d’abord si les commandes sont prises en charge, car elles ne sont disponibles que sur les appareils dotés de Camera Control, comme l’iPhone 16.

    Les commandes fournies par le système sont si faciles à créer qu’une seule ligne de code suffit.

    Avant d’ajouter la commande, assurez-vous que la session l’acceptera. Par exemple, vous ne pouvez pas ajouter une commande de zoom fournie par le système pour un appareil qui a déjà une commande de zoom. Enfin, nous ajoutons la commande à la session.

    C’est tout ce qu’il a fallu pour que le zoom fonctionne parfaitement dans l’app avec Camera Control. Mais il y a un problème. Le zoom est aussi possible avec un geste de pincement. Après avoir zoomé avec Camera Control, la UI n’était pas à jour. Le geste de pincement est donc revenu à un facteur de zoom obsolète. La solution est simple. Nous allons créer le curseur avec une fermeture d’action, qui recevra le facteur de zoom comme argument. La nouvelle valeur sera appliquée à l’interface utilisateur avec un rappel de délégué ou une propriété de modèle observable.

    Une fois que le modèle régi par le geste de pincement sera synchronisé, je pourrai zoomer avec Camera Control. Le pincement commencera toujours à partir du bon facteur de zoom.

    J’aimerais maintenant ajouter une commande qui n’est pas prête à l’emploi. Mais avant de la créer, réfléchissons à ce à quoi devrait ressembler une commande utile. Camera Control est destiné à être utilisé avec l’appareil photo iPhone. Cette fonctionnalité doit donc affecter l’apparence ou l’expérience de la prise de photos. Si vos commandes affectent des parties non pertinentes de l’app, cela prête à confusion. N’ajoutez jamais une session de capture juste pour adopter Camera Control, car l’utilisation de l’appareil photo a des exigences de puissance et de confidentialité spécifiques à une expérience de capture. Un bon exemple de commande personnalisée est un sélecteur qui parcourt les effets ou les filtres de votre app.

    Ce type de commande doit généralement fonctionner plus près de la capture que de l’interface utilisateur. Voyons donc à quoi cela ressemble. En commençant par le code que nous venons d’écrire, nous allons ajouter la commande de zoom parmi tant d’autres. Notez que le nombre de commandes possibles est limité et signalé par la propriété maxControlsCount de la session. canAddControl renvoie false une fois que vous atteignez cette limite. Nous pouvons maintenant définir nos effets. Leur rendu peut avoir lieu sur une file d’attente dédiée à l’aide de tampons d’échantillons vidéo, mais pour notre app, utilisons les effets de réaction lancés avec iOS 17. Ici, nous avons créé une liste ordonnée d’effets et de leur nom à partir de l’ensemble non ordonné disponible. Le sélecteur est initialisé avec le nom des effets à afficher lorsqu’il parcourt les options. Le sélecteur a également besoin d’un nom et d’une image Symbols SF pour le distinguer de la commande de zoom. Il est utile de désactiver la commande lorsqu’elle n’est pas prise en charge, plutôt que de l’omettre. De cette façon, elle reste visible, même si elle n’est pas interactive. Sinon, une autre commande sera sélectionnée comme option de secours, et les utilisateurs pourraient se demander ce qui s’est passé.

    Lorsque l’utilisateur modifiera l’indice sélectionné du sélecteur, nous effectuerons la réaction correspondante. Nous ciblons l’action sur la file d’attente de session, car il s’agit de notre contexte d’isolement pour la gestion de l’appareil. Il ne nous reste plus qu’à ajouter le sélecteur au tableau de commandes. Voyons comment nous avons fait !

    Quand j’interagis avec Camera Control, le zoom est désactivé dans cette configuration. Modifions la commande. Je fais glisser le doigt sur la superposition, et je vois mon sélecteur dans la liste. Je le sélectionne et j’appuie légèrement pour voir ses options. Je peux sélectionner chaque effet un à un et voir ce que ça donne dans l’aperçu.

    Super !

    Avec ce que Vitaliy et moi vous avons montré ici, vous avez tous les outils nécessaires pour créer une app photo de classe mondiale.

    Nous avons vu comment prendre des photos à l’aide de boutons physiques sur les appareils iOS, y compris avec la tige des AirPods sur iOS 26. Et nous avons appris à exploiter Camera Control comme un outil pratique pour booster les interactions de capture de votre app. Vous trouverez d’autres ressources intéressantes sur developer.apple.com, notamment des Directives d’interface humaine pour Camera Control, des conseils sur la configuration des AirPods pour tester les nouveautés, et des articles et exemples de code avec plus de détails sur l’adoption de Camera Control. C’est maintenant à votre tour de créer un appareil photo qui captera l’attention des gens. Merci de votre attention !

    • 5:35 - Initial PhotoCapture view setup

      import SwiftUI
      
      struct PhotoCapture: View {
          var body: some View {
              VStack {
                  CameraView()
              }
          }
      }
    • 5:37 - Connecting a button to the camera model

      import SwiftUI
      
      struct PhotoCapture: View {
          let camera = CameraModel()
          var body: some View {
              VStack {
                  CameraView()
                  Button(action: camera.capturePhoto) {
                      Text("Take a photo")
                  }
              }
          }
      }
    • 6:10 - Importing AVKit

      import AVKit
      import SwiftUI
      
      struct PhotoCapture: View {
          let camera = CameraModel()
          var body: some View {
              VStack {
                  CameraView()
                  Button(action: camera.capturePhoto) {
                      Text("Take a photo")
                  }
              }
          }
      }
    • 6:14 - Setting up onCameraCaptureEvent view modifier

      import AVKit
      import SwiftUI
      
      struct PhotoCapture: View {
          let camera = CameraModel()
          var body: some View {
              VStack {
                  CameraView()
                  .onCameraCaptureEvent { event in
                      if event.phase == .ended {
                         camera.capturePhoto()
                      }
                  }
                  Button(action: camera.capturePhoto) {
                      Text("Take a photo")
                  }
              }
          }
      }
    • 8:53 - Default sound for onCameraCaptureEvent view modifier

      .onCameraCaptureEvent { event
      	if event.phase == .ended {
         	camera.capturePhoto() 
        }
      }
    • 9:13 - Play photo shutter sound on AirPod stem click

      .onCameraCaptureEvent(defaultSoundDisabled: true) { event in
          if event.phase == .ended {a
              if event.shouldPlaySound {d
                  event.play(.cameraShutter)
              }
          }
          camera.capturePhoto()
       }
    • 14:46 - Add a build-in zoom slider to Camera Control

      captureSession.beginConfiguration()
      
      // configure device inputs and outputs
      
      if captureSession.supportsControls {
          let zoomControl = AVCaptureSystemZoomSlider(device: device)
      
          if captureSession.canAddControl(zoomControl) {
              captureSession.addControl(zoomControl)
          }
      }
      
      captureSession.commitConfiguration()
    • 15:40 - Modifying the built-in zoom slider to receive updates when zoom changes

      let zoomControl = AVCaptureSystemZoomSlider(device: device) { [weak self] zoomFactor in
          self?.updateUI(zoomFactor: zoomFactor)
      }
    • 16:46 - Adding a custom reaction-effects picker alongside zoom slider

      let reactions = device.availableReactionTypes.sorted { $0.rawValue < $1.rawValue }
      let titles = reactions.map { localizedTitle(reaction: $0) }
      let picker = AVCaptureIndexPicker(“Reactions", symbolName: “face.smiling.inverted”,
          localizedIndexTitles: titles)
      
      picker.isEnabled = device.canPerformReactionEffects
      picker.setActionQueue(sessionQueue) { index in
          device.performEffect(for: reactions[index])
      }
      
      let controls: [AVCaptureControl] = [zoomControl, picker]
      
      for control in controls {
          if captureSession.canAddControl(control) {
              captureSession.addControl(control)
          }
      }
    • 0:00 - Introduction
    • Découvrez comment utiliser AVKit et AVFoundation pour améliorer les interactions utilisateur dans les apps d’appareil photo. Il est désormais possible de mapper par programmation les gestes associés aux boutons physiques, par exemple augmenter ou réduire le volume, à des actions de l’appareil photo. De cette manière, il est alors possible de prendre des photos et de démarrer des vidéos en utilisant les boutons du téléphone. Une nouvelle fonctionnalité d’iOS 26 permet de contrôler à distance l’appareil photo avec des AirPods. Vous découvrirez quels sont les boutons physiques pris en charge, apprendrez à utiliser l’API AVCaptureEventInteraction et vous aurez un aperçu de Camera Control sur l’iPhone 16.

    • 2:51 - Capture physique
    • AVCaptureEventInteraction prend en charge le bouton Action. Les détails relatifs à la configuration sont disponibles dans la session de l’année dernière. ・€・Étendez les commandes de votre app à l’ensemble du système.

    • 3:01 - Gestion des évènements
    • AVCaptureEventInteraction est une API qui permet de contrôler le cycle de vie des pressions sur les boutons physiques dans les apps d’appareil photo. Celle-ci prévoit trois phases d’évènement : « began », « cancelled » et « ended ». La phase « ended » correspond au moment où l’objet appareil photo doit initier la capture. L’API distingue les actions principales et secondaires, déclenchées par des boutons spécifiques (réduction du volume, Action et Camera Control pour les actions principales, et augmentation du volume pour les actions secondaires). Cette conception offre une modularité et de la flexibilité dans la conception des apps. Les développeurs SwiftUI peuvent accéder à cette fonctionnalité via le modificateur de vue onCameraCaptureEvent. En important le framework AVKit et en associant ce modificateur à CameraView, vous pouvez activer la capture de photos à l’aide de boutons physiques en quelques lignes de code seulement, imitant ainsi le comportement de l’app Appareil photo intégrée.

    • 6:39 - Capture à distance AirPods
    • À partir d’iOS 26, les AirPods équipés de la puce H2 offriront la possibilité de contrôler l’appareil photo à distance, à l’aide de clics sur la tige. Il est possible de configurer cette fonctionnalité dans l’app Réglages et de choisir quelle action de clic sur la tige déclenchera la capture de la photo. Une nouvelle API fournit un retour audio pour ces clics de tige, avec une tonalité par défaut qui peut être personnalisée pour vos apps spécifiques. Cette amélioration permet de saisir l’instant sans utiliser les mains, le signal audio donnant la confirmation que l’action a bien été prise en compte.

    • 10:00 - Commande de l’appareil photo
    • AVCaptureControl est une nouvelle fonctionnalité de l’iPhone 16 qui permet de créer des commandes matérielles physiques pour vos interfaces d’appareil photo. Elle permet de lancer des apps d’appareil photo et de définir rapidement les réglages associés, et peut également servir de déclencheur. La commande prend en charge deux types de réglages principaux : les curseurs (continus et distincts) pour les valeurs numériques, et les sélecteurs pour les éléments d’une liste. Ces commandes sont définies dans le framework AVFoundation. Vous pouvez ajouter des commandes définies par le système pour le zoom ou la correction de l’exposition, ou créer des commandes personnalisées avec des comportements définis par l’app. Ces commandes sont ensuite ajoutées à une AVCaptureSession, et l’app répond aux interactions via des gestionnaires d’actions ou Key-Value Observing (KVO), qui mettent à jour l’UI en conséquence. Vous pouvez améliorer les fonctionnalités de l’app d’appareil photo à l’aide de Camera Control, qui permet d’ajouter aisément des commandes fournies par le système, comme le zoom, qui ne requiert qu’une seule ligne de code. Cependant, il est essentiel de s’assurer que la session accepte la commande et de synchroniser l’UI avec l’état de la commande afin d’éviter des problèmes tels que des facteurs de zoom obsolètes. Lorsque vous créez des commandes personnalisées, n’oubliez pas que Camera Control a été spécifiquement conçu pour immortaliser des moments. Un sélecteur permettant de choisir des effets ou des filtres est un exemple de commande personnalisée. Cette commande doit fonctionner plus près de la session de capture que l’UI. Vous pouvez définir des effets, initialiser le sélecteur avec des noms d’effets et désactiver la commande lorsqu’elle n’est pas pris en charge. En ciblant l’action sur la file d’attente de session, vous pouvez garantir une isolation et une gestion adéquates de l’appareil. Grâce à Capture Controls, vous pouvez créer des apps d’appareil photo de qualité professionnelle qui captiveront vos utilisateurs et utilisatrices.

Developer Footer

  • Vidéos
  • WWDC25
  • Amélioration de l’expérience photo avec les commandes de capture
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • App Store
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Fonts
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Open Source
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Sample Code
    • Tutorials
    • Downloads
    • Forums
    • Videos
    Open Menu Close Menu
    • Support Articles
    • Contact Us
    • Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Get the Apple Developer app.
    Copyright © 2025 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines