成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SwiftUI 在 WWDC 24 之后的新變化

開發 前端
在 WWDC 24 上,SwiftUI 再次通過引入更多新功能來提升其成熟度,以趕上 UIKit。今年的主要變化包括 @MainActor 隔離、視圖集合的新重載、新的可定制標簽欄體驗、英雄動畫、滾動位置的新功能以及新的 Entry 和 Previewable 宏。

前言

WWDC 24 已經到來,我們有很多內容要討論。每年,SwiftUI 都會通過引入更多功能來趕上 UIKit。今年也不例外。讓我們深入了解 SwiftUI 框架引入的新功能。

我首先要提到的主要變化是 App、Scene 和 View 協議的 @MainActor 隔離。這可能會破壞你的代碼,所以請記住這一點。

視圖集合

SwiftUI 為 Group 和 ForEach 視圖引入了新的重載,允許我們創建自定義容器,如 List 或 TabView。

struct AppStoreView<Content: View>: View {
    @ViewBuilder var content: Content
    
    var body: some View {
        VStack {
            Group(subviewsOf: content) { subviews in
                HStack {
                    if !subviews.isEmpty {
                        subviews[0]
                    }
                    
                    if subviews.count > 1 {
                        subviews[1]
                    }
                }
                
                if subviews.count > 2 {
                    VStack {
                        subviews[2...]
                    }
                }
            }
        }
    }
}

如上例所示,我們使用帶有新初始化器的 Group 視圖,允許我們訪問通過 @ViewBuilder 閉包傳遞的內容視圖的子視圖。SwiftUI 引入了新的 Subview 和 SubviewsCollection 類型,提供了對真實視圖的代理訪問。

新的標簽欄體驗

使用新的 Tab 類型,SwiftUI 提供了新的可定制標簽欄體驗,帶有流暢過渡到側邊欄。

enum Destination: Hashable {
    case home
    case search
    case settings
    case trends
}

struct RootView: View {
    @State private var selection: Destination = .home
    
    var body: some View {
        TabView {
            Tab("home", systemImage: "home", value: .home) {
                HomeView()
            }
            
            Tab("search", systemImage: "search", value: .search) {
                SearchView()
            }
            
            TabSection("Other") {
                Tab("trends", systemImage: "trends", value: .trends) {
                    TrendsView()
                }
                Tab("settings", systemImage: "settings", value: .settings) {
                    SettingsView()
                }
            }
            .tabViewStyle(.sidebarAdaptable)
        }
    }
}

如上例所示,我們使用新的 Tab 類型來定義標簽。我們還在 TabSection 實例上使用 tabViewStyle 視圖修飾符,將特定的標簽部分分組并移動到側邊欄。

英雄動畫

SwiftUI 引入了 matchedTransitionSource 和 navigationTransition,我們可以在任何 NavigationLink 實例中配對使用。

struct HeroAnimationView: View {
    @Namespace var hero
    
    var body: some View {
        NavigationStack {
            NavigationLink {
                DetailView()
                    .navigationTransition(.zoom(sourceID: "myId", in: hero))
            } label: {
                ThumbnailView()
            }
            .matchedTransitionSource(id: "myId", in: hero)
        }
    }
}

這使我們能夠在 NavigationStack 內從一個視圖導航到另一個視圖時,使用相同的標識符和命名空間創建平滑的過渡。

滾動位置

新的 ScrollPosition 類型與 scrollPosition 視圖修飾符配對,允許我們讀取 ScrollView 實例的精確位置。我們還可以使用它編程地滾動到滾動內容的特定點。

struct ScrollPositionExample: View {
    @State private var position: ScrollPosition = .init(point: .zero)
    
    var body: some View {
        ScrollView {
            ForEach(1..<1000) { item in
                Text(item.formatted())
            }
            
            Button("jump to top") {
                position = ScrollPosition(point: .zero)
            }
        }
        .scrollPosition($position)
    }
}

Entry 宏

新的 Entry 宏允許我們快速引入環境值、聚焦值、容器值等,無需樣板代碼。讓我們看看在 Entry 宏之前我們如何定義環境值。

struct ItemsPerPageKey: EnvironmentKey {
    static var defaultValue: Int = 10
}

extension EnvironmentValues {
    var itemsPerPage: Int {
        get { self[ItemsPerPageKey.self] }
        set { self[ItemsPerPageKey.self] = newValue }
    }
}

現在,我們可以通過使用 Entry 宏來簡化代碼。

extension EnvironmentValues {
    @Entry var itemsPerPage: Int = 10
}

預覽

新的 Previewable 宏允許我們在預覽中引入狀態,而無需將其包裝到額外的包裝視圖中。

#Preview("toggle") {
    @Previewable @State var toggled = true
    return Toggle("Loud Noises", isOn: $toggled)
}

其他

SwiftUI 框架的下一版本包括許多新 API,如窗口推送、TextField 和 TextEditor 視圖中的文本選擇觀察、搜索焦點監控、自定義文本渲染、新的 MeshGradient 類型等等,我無法在一篇文章中涵蓋所有內容。

總結

在 WWDC 24 上,SwiftUI 再次通過引入更多新功能來提升其成熟度,以趕上 UIKit。今年的主要變化包括 @MainActor 隔離、視圖集合的新重載、新的可定制標簽欄體驗、英雄動畫、滾動位置的新功能以及新的 Entry 和 Previewable 宏。這些改進使開發者能夠創建更靈活和高效的用戶界面。SwiftUI還引入了許多新的API,如窗口推送、文本選擇觀察、搜索焦點監控等,使開發更加便捷和強大。

責任編輯:武曉燕 來源: Swift社區
相關推薦

2023-06-09 09:00:36

Swift視圖修飾符

2019-06-03 13:53:51

蘋果iOS 13MacOS 13

2022-10-25 08:52:09

KubuntuUbuntuLinux

2022-10-29 19:53:28

Xubuntu??Ubuntu

2022-10-24 11:26:01

UbuntuLinux

2015-06-10 16:23:33

WWDC庫克蘋果

2022-10-25 08:41:41

UbuntuLinux

2022-10-26 19:39:00

Ub untuBudgieGNOME

2021-08-26 09:05:26

IT人才招聘市場CIO

2021-05-04 17:30:59

FedoraLinuxWorkstation

2021-02-14 00:17:10

加密貨幣數字貨幣比特幣

2009-03-09 18:39:56

Windows 7新特性

2015-12-11 16:23:16

2017-09-14 08:24:27

2022-03-23 11:13:18

LinuxLinux 內核

2022-03-20 08:23:37

微軟Windows 11

2014-05-08 09:52:14

Windows 9Windows系統

2012-03-26 10:09:27

Windows 8RC候選版

2010-03-16 18:19:39

Ubuntu9.10

2019-11-25 08:00:00

微軟PowerShellPowerShell
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www.毛片| 五月婷婷丁香 | 福利视频大全 | 欧美日韩久久 | 老外黄色一级片 | 亚洲成人综合在线 | 99热热热热 | 亚洲一区二区三区四区在线观看 | 2018天天干天天操 | 综合视频在线 | 欧美精品一区二区三区四区 在线 | 人人玩人人添人人澡欧美 | 福利视频网 | 欧美 日韩 亚洲91麻豆精品 | 日韩免费一区 | 一区二区三区网站 | 91精品国产欧美一区二区成人 | 在线播放一区二区三区 | 东京久久| 成人日批视频 | 日本视频中文字幕 | 午夜色播| 看片91| 一区二区在线免费观看 | av免费看片| 国产精品黄视频 | 农村妇女毛片精品久久久 | 视频二区在线观看 | 欧美网站一区二区 | 亚洲一区| 亚洲国产视频一区 | 亚洲视频区| 91深夜福利视频 | 亚洲视频免费在线观看 | 欧美一级视频在线观看 | 成人激情视频 | 四虎永久免费在线 | 91av导航 | 亚洲福利一区二区 | www.99热.com| 九九热在线视频观看这里只有精品 |