当前位置:首页 > 科技  > 软件

SwiftUI 在 WWDC 24 之后的新变化

来源: 责编: 时间:2024-06-25 17:20:33 121观看
导读前言WWDC 24 已经到来,我们有很多内容要讨论。每年,SwiftUI 都会通过引入更多功能来赶上 UIKit。今年也不例外。让我们深入了解 SwiftUI 框架引入的新功能。我首先要提到的主要变化是 App、Scene 和 View 协议的 @MainA

前言

WWDC 24 已经到来,我们有很多内容要讨论。每年,SwiftUI 都会通过引入更多功能来赶上 UIKit。今年也不例外。让我们深入了解 SwiftUI 框架引入的新功能。pjJ28资讯网——每日最新资讯28at.com

我首先要提到的主要变化是 App、Scene 和 View 协议的 @MainActor 隔离。这可能会破坏你的代码,所以请记住这一点。pjJ28资讯网——每日最新资讯28at.com

视图集合

SwiftUI 为 Group 和 ForEach 视图引入了新的重载,允许我们创建自定义容器,如 List 或 TabView。pjJ28资讯网——每日最新资讯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 类型,提供了对真实视图的代理访问。pjJ28资讯网——每日最新资讯28at.com

新的标签栏体验

使用新的 Tab 类型,SwiftUI 提供了新的可定制标签栏体验,带有流畅过渡到侧边栏。pjJ28资讯网——每日最新资讯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 视图修饰符,将特定的标签部分分组并移动到侧边栏。pjJ28资讯网——每日最新资讯28at.com

英雄动画

SwiftUI 引入了 matchedTransitionSource 和 navigationTransition,我们可以在任何 NavigationLink 实例中配对使用。pjJ28资讯网——每日最新资讯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 内从一个视图导航到另一个视图时,使用相同的标识符和命名空间创建平滑的过渡。pjJ28资讯网——每日最新资讯28at.com

滚动位置

新的 ScrollPosition 类型与 scrollPosition 视图修饰符配对,允许我们读取 ScrollView 实例的精确位置。我们还可以使用它编程地滚动到滚动内容的特定点。pjJ28资讯网——每日最新资讯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 宏之前我们如何定义环境值。pjJ28资讯网——每日最新资讯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 宏来简化代码。pjJ28资讯网——每日最新资讯28at.com

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

预览

新的 Previewable 宏允许我们在预览中引入状态,而无需将其包装到额外的包装视图中。pjJ28资讯网——每日最新资讯28at.com

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

其他

SwiftUI 框架的下一版本包括许多新 API,如窗口推送、TextField 和 TextEditor 视图中的文本选择观察、搜索焦点监控、自定义文本渲染、新的 MeshGradient 类型等等,我无法在一篇文章中涵盖所有内容。pjJ28资讯网——每日最新资讯28at.com

总结

在 WWDC 24 上,SwiftUI 再次通过引入更多新功能来提升其成熟度,以赶上 UIKit。今年的主要变化包括 @MainActor 隔离、视图集合的新重载、新的可定制标签栏体验、英雄动画、滚动位置的新功能以及新的 Entry 和 Previewable 宏。这些改进使开发者能够创建更灵活和高效的用户界面。SwiftUI还引入了许多新的API,如窗口推送、文本选择观察、搜索焦点监控等,使开发更加便捷和强大。pjJ28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-96432-0.htmlSwiftUI 在 WWDC 24 之后的新变化

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

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

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

标签:
  • 热门焦点
  • 石头自清洁扫拖机器人G10S评测:多年黑科技集大成之作 懒人终极福音

    石头自清洁扫拖机器人G10S评测:多年黑科技集大成之作 懒人终极福音

    科技圈经常能看到一个词叫“缝合怪”,用来形容那些把好多功能或者外观结合在一起的产品,通常这样的词是贬义词,但如果真的是产品缝合的好、缝合的实用的话,那它就成了中性词,今
  • 十个简单但很有用的Python装饰器

    十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 每天一道面试题-CPU伪共享

    每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 中国家电海外掘金正当时|出海专题

    中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 猿辅导与新东方的两种“归途”

    猿辅导与新东方的两种“归途”

    作者|卓心月 出品|零态LT(ID:LingTai_LT)如何成为一家伟大企业?答案一定是对&ldquo;势&rdquo;的把握,这其中最关键的当属对企业战略的制定,且能够站在未来看现在,即使这其中的
  • 年轻人的“职场羞耻感”,无处不在

    年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元&ldquo;人在职场,应该选择什么样的着装?&rdquo;近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • 郭明錤称华为和江淮汽车合作开发问界MPV,定价100万左右、计划明年量产

    郭明錤称华为和江淮汽车合作开发问界MPV,定价100万左右、计划明年量产

    8 月 1 日消息,郭明錤今天在 Medium 平台发布博文,称华为正在和江淮汽车合作,开发售价在 100 万元的问界 MPV,预计在 2024 年第 2 季度量产,销量目标为
  • iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    经过了一段时间的密集爆料,昨日iQOO官方如期对外宣布:将于5月23日推出全新的iQOO Neo8系列新品,官方称这是一款拥有旗舰级性能调校的作品。随着发布时
  • 滴滴违法违规被罚80.26亿 共存在16项违法事实

    滴滴违法违规被罚80.26亿 共存在16项违法事实

    滴滴违法违规被罚80.26亿 存在16项违法事实开始于2121年7月,历经一年时间,网络安全审查办公室对“滴滴出行”网络安全审查终于有了一个暂时的结束。据“网信
Top
Baidu
map