View in English

  • Apple Developer
    • Get Started

    Explore Get Started

    • Overview
    • Learn
    • Apple Developer Program

    Stay Updated

    • Latest News
    • Hello Developer
    • Platforms

    Explore Platforms

    • Apple Platforms
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store

    Featured

    • Design
    • Distribution
    • Games
    • Accessories
    • Web
    • Home
    • CarPlay
    • Technologies

    Explore Technologies

    • Overview
    • Xcode
    • Swift
    • SwiftUI

    Featured

    • Accessibility
    • App Intents
    • Apple Intelligence
    • Games
    • Machine Learning & AI
    • Security
    • Xcode Cloud
    • Community

    Explore Community

    • Overview
    • Meet with Apple events
    • Community-driven events
    • Developer Forums
    • Open Source

    Featured

    • WWDC
    • Swift Student Challenge
    • Developer Stories
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Centers
    • Documentation

    Explore Documentation

    • Documentation Library
    • Technology Overviews
    • Sample Code
    • Human Interface Guidelines
    • Videos

    Release Notes

    • Featured Updates
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • tvOS
    • Xcode
    • Downloads

    Explore Downloads

    • All Downloads
    • Operating Systems
    • Applications
    • Design Resources

    Featured

    • Xcode
    • TestFlight
    • Fonts
    • SF Symbols
    • Icon Composer
    • Support

    Explore Support

    • Overview
    • Help Guides
    • Developer Forums
    • Feedback Assistant
    • Contact Us

    Featured

    • Account Help
    • App Review Guidelines
    • App Store Connect Help
    • Upcoming Requirements
    • Agreements and Guidelines
    • System Status
  • Quick Links

    • Events
    • News
    • Forums
    • Sample Code
    • Videos
 

Vidéos

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

Plus de vidéos

  • À propos
  • Résumé
  • Code
  • Créez une app SwiftUI avec le nouveau design

    Découvrez comment Liquid Glass transforme l'apparence de votre app. Découvrez comment ce nouveau matériel sublime améliore les barres d'outils, les commandes et la structure des apps sur toutes les plates-formes, offrant des interactions agréables et intégrant parfaitement votre app au système. Découvrez comment adopter de nouvelles API qui peuvent vous aider à tirer le meilleur parti de Liquid Glass.

    Chapitres

    • 0:00 - Introduction
    • 3:07 - Structure de l’app
    • 7:49 - Barres d’outils
    • 11:10 - Recherche
    • 14:03 - Contrôles
    • 17:57 - Effets Liquid Glass
    • 21:31 - Étapes suivantes

    Ressources

    • Applying Liquid Glass to custom views
    • Landmarks: Building an app with Liquid Glass
    • Adopting Liquid Glass
      • Vidéo HD
      • Vidéo SD

    Vidéos connexes

    WWDC25

    • Découvrez le nouveau système de conception
  • Rechercher dans cette vidéo…
    • 1:11 - Segmented Picker

      Picker("View", selection: $selection) {
          Text("Map").tag(ViewMode.map)
          Text("List").tag(ViewMode.list)
      }
      .pickerStyle(.segmented)
    • 3:59 - Extend background images

      // Extend background images
      
      struct LandmarkDetailView: View {
          let landmark: Landmark
      
          var body: some View {
              ScrollView {
                  VStack {
                      Image(landmark.backgroundImageName)
                          .resizable()
                          .aspectRatio(contentMode: .fill)
                          .backgroundExtensionEffect()
                  }
              }
          }
      }
    • 4:23 - Adding an inspector

      // Adding an inspector
      
      NavigationSplitView {
          // sidebar
      } detail: {
          // detail
      }
      .inspector(isPresented: $presentInspector) {
          LandmarkDetailInspectorView(landmark: landmark)
      }
    • 5:07 - Minimize tab bar on scroll

      // Minimize tab bar on scroll
      
      TabView {
          // tabs
      }
      .tabBarMinimizeBehavior(.onScrollDown)
    • 5:39 - Tab bar accessory

      // Tab bar accessory
      
      TabView {
          // tabs
      }
      .tabBarMinimizeBehavior(.onScrollDown)
      .tabViewBottomAccessory {
          MusicPlaybackView()
      }
      
      struct MusicPlaybackView: View {
          @Environment(\.tabViewBottomAccessoryPlacement)
          var placement
      
          var body: some View {
              if placement == .inline {
                  // compact layout
              } else {
                  // full layout
              }
          }
      }
    • 6:20 - Sheets with presentation detents

      // Sheets
      
      CollectionDetailView()
          .sheet(isPresented: $isShowingLandmarksSelection) {
              LandmarksSelectionList()
                  .presentationDetents([.height(180), .medium, .large])
          }
    • 6:53 - Presentation background

      // Presentation background
      
      CollectionDetailView()
          .sheet(isPresented: $isShowingLandmarksSelection) {
              LandmarksSelectionList()
                  .presentationDetents([.height(180), .medium, .large])
                  .presentationBackground(.thickMaterial)
          }
    • 7:10 - Zoom transition

      // Zoom transition
      
      @Namespace private var namespace
      
      ContentView()
          .toolbar {
              ToolbarItem(placement: .bottomBar) {
                  Button {
                      isPresented = true
                  } label: {
                      Image(systemName: "map")
                  }
                  .matchedTransitionSource(
                      id: "transition-id", in: namespace)
              }
          }
          .sheet(isPresented: $isPresented) {
              SheetContent()
                  .navigationTransition(
                      .zoom(
                          sourceID: "transition-id", in: namespace))
          }
    • 7:27 - Toolbar menus

      // Toolbar menus
      
      LandmarkDetailView()
          .toolbar {
              ToolbarItemGroup {
                  Button { } label: {
                      Image(systemName: "square.and.arrow.up")
                  }
      
                  Menu(
                      "Collections",
                      systemImage: "book.closed"
                  ) {
                      // menu items
                  }
              }
          }
    • 7:41 - Confirmation dialog

      // Confirmation dialog
      
      CollectionDetailView()
          .toolbar {
              Button("Delete", systemImage: "trash") {
                  presentDialog = true
              }
              .confirmationDialog(
                  "Delete?",
                  isPresented: $presentDialog
              ) {
                  Button("Delete", role: .destructive) { }
              }
          }
    • 8:26 - Visually separate toolbar items

      // Visually separate toolbar items
      
      struct LandmarkDetailView: View {
          var body: some View {
              ScrollView {
                  ScrollContent()
              }
              .toolbar {
                  ToolbarItem { ShareLink() }
                  ToolbarSpacer(.fixed)
                  ToolbarItem { FavoriteButton() }
                  ToolbarItem { CollectionsButton() }
                  ToolbarSpacer(.fixed)
                  ToolbarItem { InspectorToggle() }
              }
          }
      }
    • 8:47 - Toolbar items with flexible spacing

      // Toolbar items with flexible spacing
      
      struct InboxView: View {
          var body: some View {
              ScrollView {
                  ScrollContent()
              }
              .toolbar {
                  ToolbarItem(placement: .bottomBar) {
                      FilterPicker()
                  }
                  ToolbarSpacer(.flexible, placement: .bottomBar)
                  DefaultToolbarItem(
                      kind: .search, placement: .bottomBar)
                  ToolbarSpacer(.fixed, placement: .bottomBar)
                  ToolbarItem(placement: .bottomBar) {
                      NewMessageButton()
                  }
              }
          }
      }
    • 9:07 - Hide shared glass background

      // Hide shared glass background
      
      struct HomeView: View {
          var body: some View {
              ContentView()
                  .toolbar {
                      ToolbarItem {
                          ProfileButton()
                      }
                      .sharedBackgroundVisibility(.hidden)
                  }
          }
      }
    • 9:40 - Toolbar item with a badge

      // Toolbar item with a badge
      
      @Environment(ModelData.self) var modelData
      
      CollectionsView()
          .toolbar {
              ToolbarItemGroup {
                  Button("Notifications", systemImage: "bell") { }
                      .badge(modelData.notifications.count)
                  Button("Add", systemImage: "plus") { }
              }
          }
    • 10:57 - Hard scroll edge effect

      // Hard scroll edge effect
      
      ScrollView {
          // content
      }
      .scrollEdgeEffectStyle(.hard, for: .top)
    • 11:44 - Search in top-trailing position

      // Search in the top-trailing position
      
      struct TopTrailingSearch: View {
          @State private var searchText = ""
      
          var body: some View {
              NavigationSplitView {
                  SidebarContent()
              } detail: {
                  DetailContent()
              }
              .searchable(text: $searchText)
          }
      }
    • 12:51 - Minimized search in toolbar

      // Minimized search in the toolbar
      
      struct MinimizedSearch: View {
          @State private var searchText = ""
      
          var body: some View {
              NavigationStack {
                  DetailContent()
              }
              .searchable(text: $searchText)
              .searchToolbarBehavior(.minimize)
          }
      }
    • 13:17 - TabView with a search tab

      // TabView with a search tab
      
      struct ContentView: View {
          @State private var searchText = ""
      
          var body: some View {
              TabView {
                  // other tabs
      
                  Tab(role: .search) {
                      NavigationStack {
                          SearchTabContent()
                      }
                  }
              }
              .searchable(text: $searchText)
          }
      }
    • 14:25 - Capsule buttons

      Button(…)
          .buttonBorderShape(.capsule)
    • 15:09 - Button sizes: high density layouts

      // Button sizes: high density layouts
      
      VStack {
          Picker("Inspector View Mode", selection: $mode) {
              // options
          }
          .controlSize(.large)
      
          InspectorStackView()
              .controlSize(.small)
      }
    • 15:33 - Glass button styles

      // Prominent glass button
      Button("Get Started") { }
          .buttonStyle(.glassProminent)
      
      // Standard glass button
      Button("Learn More") { }
          .buttonStyle(.glass)
    • 16:32 - macOS menu icons

      // Menus
      
      Menu("Edit") {
          Section {
              Button("Undo",
                     systemImage: "arrow.uturn.backward") { }
              Button("Redo",
                     systemImage: "arrow.uturn.forward") { }
          }
      
          Section {
              Button("Copy",
                     systemImage: "document.on.document") { }
              Button("Duplicate",
                     systemImage: "plus.square.on.square") { }
          }
      }
    • 17:27 - Concentric rectangle shape

      // Concentric rectangle shape
      
      CustomControl()
          .background(.tint, in: .rect(corner: .containerConcentric))
    • 18:30 - Glass effect

      // Glass effect
      
      Label("Desert", systemImage: "sun.max.fill")
          .padding()
          .glassEffect()
    • 18:52 - Glass effect: custom shape

      // Customize shape
      
      Label("Desert", systemImage: "sun.max.fill")
          .padding()
          .glassEffect(in: .rect(cornerRadius: 16))
    • 18:59 - Glass effect: tinted

      // Tinted glass
      
      Label("Desert", systemImage: "sun.max.fill")
          .padding()
          .glassEffect(.regular.tint(.green))
    • 19:21 - Glass effect: interactive

      // Interactive glass
      
      Label("Desert", systemImage: "sun.max.fill")
          .padding()
          .glassEffect(.regular.interactive())
    • 19:51 - Glass morphing with GlassEffectContainer

      // GlassEffectContainer
      
      @Namespace var namespace
      
      GlassEffectContainer {
          VStack {
              if isExpanded {
                  VStack(spacing: 16) {
                      ForEach(badges) { badge in
                          BadgeLabel(badge: badge)
                              .glassEffect()
                              .glassEffectID(badge.id, in: namespace)
                      }
                  }
              }
      
              BadgeToggle()
                  .buttonStyle(.glass)
                  .glassEffectID("badgeToggle", in: namespace)
          }
      }
    • 0:00 - Introduction
    • iOS 26 et macOS Tahoe inaugurent Liquid Glass, un nouveau matériau adaptatif inspiré du verre et des liquides pour les commandes et les éléments de navigation. Ce matériau change de couleur lorsque quelqu’un fait défiler le contenu, et rend les commandes comme les bascules et les curseurs plus interactifs et visuellement attrayants. Les mises à jour s’appliquent à toutes les plateformes Apple et incluent des modifications apportées aux composants structurels tels que TabView et NavigationSplitView, aux barres d’outils, aux expériences de recherche, ainsi que l’introduction de nouvelles API permettant aux développeurs de personnaliser l’interface utilisateur de leurs apps. L’app Landmarks présente ces nouvelles fonctionnalités.

    • 3:07 - Structure de l’app
    • La structure applicative est mise à jour avec des API améliorées, notamment NavigationSplitView, TabView et Sheets, toutes dotées du nouveau style Liquid Glass. NavigationSplitView dispose désormais d’une barre latérale Liquid Glass flottante avec un modificateur « backgroundExtensionEffect » qui permet aux vues de s’étendre au-delà de la zone de sécurité sans rognage. Sur iPhone, les TabViews sont dotées d’une barre d’onglets flottante qui se minimise lors du défilement, ce qui améliore la visibilité du contenu. Elles peuvent aussi inclure une vue accessoire inférieure pour des commandes supplémentaires. Les éléments Sheets ont désormais un arrière-plan Liquid Glass qui passe en douceur des hauteurs partielles aux hauteurs totales. Ils peuvent également apparaître à partir des boutons de présentation, créant ainsi une expérience utilisateur fluide. D’autres présentations comme les menus, alertes et fenêtres contextuelles sortent également en douceur des commandes Liquid Glass. Les boîtes de dialogue apparaissent désormais automatiquement à partir des boutons qui les présentent.

    • 7:49 - Barres d’outils
    • La nouvelle conception de l’app présente des barres d’outils flottantes sur les surfaces Liquid Glass ainsi que le regroupement automatique des éléments. Vous pouvez utiliser l’API ToolbarSpacer pour créer un regroupement et un espacement personnalisés, améliorant ainsi la clarté visuelle. Ajoutez des badges avec une seule ligne de code pour indiquer les notifications. Les icônes monochromes réduisent le bruit et un effet de bord de défilement automatique floute le contenu sous les barres d’outils pour plus de lisibilité. Vous pouvez supprimer les arrière-plans en trop et procéder à des ajustements pour obtenir des interfaces utilisateur plus denses.

    • 11:10 - Recherche
    • La nouvelle conception introduit deux principaux modèles de recherche sur les plateformes : Recherche dans la barre d’outils. Le champ de recherche se trouve au bas de l’écran sur iPhone, dans le coin supérieur droit de l’écran sur iPad/Mac, ou réduit sous forme de bouton qui se développe lorsque vous appuyez dessus. Page de recherche dédiée. La recherche est accessible via un onglet qui remplace la barre d’onglets par un champ de recherche et le contenu de l’app. Le champ de recherche apparaît centré au-dessus des suggestions, sur iPad et Mac.

    • 14:03 - Contrôles
    • La nouvelle conception introduit une ressemblance cohérente entre les plateformes pour diverses commandes. Les boutons ont désormais une forme de capsule par défaut, avec des hauteurs plus élevées sur macOS pour une meilleure lisibilité et de plus grandes cibles de clic. Des boutons extra-larges et de nouveaux styles de verre sont également disponibles. Les curseurs prennent désormais en charge les marques de graduation, le placement manuel de ces dernières et le démarrage du remplissage de la piste à partir de valeurs spécifiques. Les menus ont un nouveau design avec un placement uniforme des icônes sur toutes les plateformes. La nouvelle conception présente également la concentricité des coins, garantissant que les commandes s’alignent parfaitement dans leurs conteneurs.

    • 17:57 - Effets Liquid Glass
    • Pour personnaliser davantage une app, vous pouvez créer des éléments Liquid Glass personnalisés. Par exemple, l’app Landmarks utilise des badges avec l’effet Liquid Glass. Pour ce faire, appliquez le modificateur « glassEffect » aux vues personnalisées, que vous pouvez mettre en forme et teinter pour les accentuer. Le modificateur « interactive » est désormais disponible pour les commandes iOS afin de permettre la mise à l’échelle, le rebond et le scintillement lors de l’interaction. Regroupez plusieurs éléments Liquid Glass dans un « GlassEffectContainer » pour garantir des résultats visuels cohérents, car le verre ne peut pas échantillonner le verre. Créez des transitions entre les éléments Liquid Glass à l’aide du modificateur « glassEffectID » qui permet d’obtenir des effets de morphing fluides. Cette technique renforce l’attrait visuel et le caractère unique d’une app, en lui permettant de se démarquer.

    • 21:31 - Étapes suivantes
    • La nouvelle conception de Xcode 26 inclut des commandes standard qui apportent des améliorations automatiques ainsi que Liquid Glass pour la création de composants expressifs. Auditez les flux de vos apps, supprimez les couleurs d’arrière-plan inutiles et exploitez Liquid Glass pour mettre vos apps en valeur.

Developer Footer

  • Vidéos
  • WWDC25
  • Créez une app SwiftUI avec le nouveau design
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • Apple Intelligence
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Downloads
    • Sample Code
    • Videos
    Open Menu Close Menu
    • Help Guides & Articles
    • Contact Us
    • Forums
    • Feedback & 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
    • Mini Apps Partner 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
    Read the latest news.
    Get the Apple Developer app.
    Copyright © 2026 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines