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

SwiftUI 在 WWDC 24 之后的新变化

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

前言

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

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

视图集合

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

新的标签栏体验

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

英雄动画

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

滚动位置

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

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

预览

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

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

其他

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

总结

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

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

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

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

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

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • 影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 一加首款折叠屏!一加Open渲染图出炉:罕见单手可握小尺寸

    8月5日消息,此前就有爆料称,一加首款折叠屏手机将会在第三季度上市,如今随着时间临近,新机的各种消息也开始浮出水面。据悉,这款新机将会被命名为&ldquo;On
  • 一篇文章带你了解 CSS 属性选择器

    属性选择器对带有指定属性的 HTML 元素设置样式。可以为拥有指定属性的 HTML 元素设置样式,而不仅限于 class 和 id 属性。一、了解属性选择器CSS属性选择器提供了一种简单而
  • 大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 苹果、三星、惠普等暂停向印度出口笔记本和平板电脑

    集微网消息,据彭博社报道,在8月3日印度突然禁止在没有许可证的情况下向印度进口电脑/平板及显示器等产品后,苹果、三星电子和惠普等大公司暂停向印度
  • 回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    2023年6月30日,全球行业分析机构Counterpoint Research发布的《中国智能手机高端市场白皮书》显示,中国智能手机品牌正在寻求高质量发展,中国高端智能
Top