日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

SwiftUI 在 WWDC 24 之后的新變化

來源: 責編: 時間:2024-06-25 17:20:33 198觀看
導讀前言WWDC 24 已經到來,我們有很多內容要討論。每年,SwiftUI 都會通過引入更多功能來趕上 UIKit。今年也不例外。讓我們深入了解 SwiftUI 框架引入的新功能。我首先要提到的主要變化是 App、Scene 和 View 協議的 @MainA

前言

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

我首先要提到的主要變化是 App、Scene 和 View 協議的 @MainActor 隔離。這可能會破壞你的代碼,所以請記住這一點。D7c28資訊網——每日最新資訊28at.com

視圖集合

SwiftUI 為 Group 和 ForEach 視圖引入了新的重載,允許我們創建自定義容器,如 List 或 TabView。D7c28資訊網——每日最新資訊28at.com

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 類型,提供了對真實視圖的代理訪問。D7c28資訊網——每日最新資訊28at.com

新的標簽欄體驗

使用新的 Tab 類型,SwiftUI 提供了新的可定制標簽欄體驗,帶有流暢過渡到側邊欄。D7c28資訊網——每日最新資訊28at.com

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 視圖修飾符,將特定的標簽部分分組并移動到側邊欄。D7c28資訊網——每日最新資訊28at.com

英雄動畫

SwiftUI 引入了 matchedTransitionSource 和 navigationTransition,我們可以在任何 NavigationLink 實例中配對使用。D7c28資訊網——每日最新資訊28at.com

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 內從一個視圖導航到另一個視圖時,使用相同的標識符和命名空間創建平滑的過渡。D7c28資訊網——每日最新資訊28at.com

滾動位置

新的 ScrollPosition 類型與 scrollPosition 視圖修飾符配對,允許我們讀取 ScrollView 實例的精確位置。我們還可以使用它編程地滾動到滾動內容的特定點。D7c28資訊網——每日最新資訊28at.com

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 宏之前我們如何定義環境值。D7c28資訊網——每日最新資訊28at.com

struct ItemsPerPageKey: EnvironmentKey {    static var defaultValue: Int = 10}extension EnvironmentValues {    var itemsPerPage: Int {        get { self[ItemsPerPageKey.self] }        set { self[ItemsPerPageKey.self] = newValue }    }}

現在,我們可以通過使用 Entry 宏來簡化代碼。D7c28資訊網——每日最新資訊28at.com

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

預覽

新的 Previewable 宏允許我們在預覽中引入狀態,而無需將其包裝到額外的包裝視圖中。D7c28資訊網——每日最新資訊28at.com

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

其他

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

總結

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

本文鏈接:http://www.www897cc.com/showinfo-26-96432-0.htmlSwiftUI 在 WWDC 24 之后的新變化

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: .NET使用CsvHelper快速讀取和寫入CSV文件

下一篇: C#中的異步編程:深入理解async和await

標簽:
  • 熱門焦點
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學習反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進行反混淆,尤其是使用自定義混淆器對其進行混淆時。什么是混
  • K8S | Service服務發現

    一、背景在微服務架構中,這里以開發環境「Dev」為基礎來描述,在K8S集群中通常會開放:路由網關、注冊中心、配置中心等相關服務,可以被集群外部訪問;圖片對于測試「Tes」環境或者
  • 只需五步,使用start.spring.io快速入門Spring編程

    步驟1打開https://start.spring.io/,按照屏幕截圖中的內容創建項目,添加 Spring Web 依賴項,并單擊“生成”按鈕下載 .zip 文件,為下一步做準備。請在進入步驟2之前進行解壓。圖
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。可以用來發現應用程序、操作系統和網絡協議等中的漏洞或
  • 慕巖炮轟抖音,百合網今何在?

    來源:價值研究所 作者:Hernanderz&ldquo;難道就因為自己的一個產品牛逼了,從客服到總裁,都不愿意正視自己產品和運營上的問題,選擇逃避了嗎?&rdquo;這一番話,出自百合網聯合創
  • 信通院:小米、華為等11家應用商店基本完成APP簽名及驗簽工作

    中國信通院表示,目前,小米、華為、OPPO、vivo、360手機助手、百度手機助手、應用寶、豌豆莢和努比亞等9家應用商店,以及抖音和快手2家新型應用分發平
  • OPPO Reno10 Pro英雄聯盟定制禮盒公布:薩勒芬妮同款配色夢幻十足

    5月24日,OPPO推出了全新的OPPO Reno 10系列,包含OPPO Reno10、OPPO Reno10 Pro和OPPO Reno10 Pro+三款新機,全系標配了超光影長焦鏡頭,是迄今為止拍照
  • 蘋果140W USB-C充電器:采用氮化鎵技術

    據10 月 30 日 9to5 Mac 消息報道,當蘋果推出新的 MacBook Pro 2021 時,該公司還推出了新的 140W USB-C 充電器,附贈在 MacBook Pro 16 英寸機型的盒子里,也支
  • 上海舉辦人工智能大會活動,建設人工智能新高地

    人工智能大會在上海浦江兩岸隆重拉開帷幕,人工智能新技術、新產品、新應用、新理念集中亮相。8月30日晚,作為大會的特色活動之一的上海人工智能發展盛典人工
Top 主站蜘蛛池模板: 陇川县| 工布江达县| 威信县| 磐安县| 萍乡市| 北碚区| 五台县| 融水| 汝南县| 太仓市| 兰考县| 大城县| 克东县| 新野县| 平和县| 上思县| 易门县| 洛南县| 育儿| 石嘴山市| 鞍山市| 河北区| 吉林省| 天全县| 平塘县| 黔江区| 柳州市| 重庆市| 罗源县| 无锡市| 内丘县| 天峻县| 张家界市| 合肥市| 巍山| 玉山县| 天津市| 额尔古纳市| 崇礼县| 新沂市| 诸暨市|