🦅

[更新中]WWDC24で発表されたSwiftUIの新機能

2024/06/11に公開

TabView

SidebarAdaptableTabViewStyle (iOS 18.0+)

https://developer.apple.com/documentation/swiftui/tabviewstyle/sidebaradaptable

新しいTabViewStyleが追加されました。
sidebarとtop tab barを自動で切り変えます。

 TabView {
      ・・・
 }
.tabViewStyle(.sidebarAdaptable)
sidebar top tab bar

PresentationSizing (iOS 18.0+)

https://developer.apple.com/documentation/swiftui/view/presentationsizing(_:)

sheetのサイズを変更できるようになりました。
ハーフモーダルとは異なります。

  • .automatic
  • .fitted
  • .form
  • .page
  • fitted(horizontal: Bool, vertical: Bool)
  • proposedSize(for root: PresentationSizingRoot, context: PresentationSizingContext)
  • sticky(horizontal: Bool = false, vertical: Bool = false)

から選択できます。

.sheet(isPresented: $showAddSheet) {
    AddPartyView()
        .presentationSizing(.form)
}

NavigationTransition (iOS 18.0+)

https://developer.apple.com/documentation/swiftui/view/navigationtransition(_:)?changes=_2_1

画面遷移のトランジションを指定できるようになりました。

NavigationLink {
    PartyDetailView(party: party)
        .navigationTransition(.zoom(
            sourceID: party.id, in: namespace))
} label: {
    Text("Party!")
}
.matchedTransitionSource(id: party.id, in: namespace)

ControlWidget (iOS 18.0+)

https://developer.apple.com/documentation/swiftui/controlwidget?changes=_2_1

MeshGradient (iOS 18.0+)

https://developer.apple.com/documentation/swiftui/meshgradient/

グラデーションを、より細かく指定できるようになりました。

MeshGradient(
    width: 3,
    height: 3,
    points: [
        .init(0, 0), .init(0.5, 0), .init(1, 0),
        .init(0, 0.5), .init(0.3, 0.5), .init(1, 0.5),
        .init(0, 1), .init(0.5, 1), .init(1, 1)
    ],
    colors: [
        .red, .purple, .indigo,
        .orange, .cyan, .blue,
        .yellow, .green, .mint
    ]
)

DocumentGroupLaunchScene

https://developer.apple.com/documentation/SwiftUI/DocumentGroupLaunchScene

DocumentGroupを使用しているアプリの起動画面をカスタマイズできます。

DocumentGroupLaunchScene("Your Lyrics") {
    NewDocumentButton()
    Button("New Parody from Existing Song") {
        // Do something!
    }
} background: {
    PinkPurpleGradient()
} backgroundAccessoryView: { geometry in
    MusicNotesAccessoryView(geometry: geometry)
         .symbolEffect(.wiggle(.rotational.continuous()))
} overlayAccessoryView: { geometry in
    MicrophoneAccessoryView(geometry: geometry)
}

Symbols

SymbolEffect

https://developer.apple.com/documentation/symbols/symboleffect
SymbolEffectに

  • .breathe
  • .rotate
  • .wiggle

が追加されました。

Discussion