写点什么

开启 UI 开发新篇章,SwiftUI 5 不再使用 Combine,扩展更多动画功能

  • 2023-07-21
    北京
  • 本文字数:1081 字

    阅读完需:约 4 分钟

开启UI开发新篇章,SwiftUI 5 不再使用Combine,扩展更多动画功能

在 WWDC 2023 中,苹果展示了其 UI 编程声明式框架的最新迭代。SwiftUI 5 使用全新的 Observation 框架取代 Combine,彻底改变了其反应式的基础。此外,这次迭代中还增加了对分阶段动画、 ScrollView 优化,新手势等等的支持。


全新 Observation 框架的采用带来了众多优势,其中包括语法的简化和语义的精简、跟踪选项和集合的可能性,以及对 State 和 Environment 用法的扩展以取代 StateObject 和 EnvironmentObjectObservation 框架还取消了使用 @Published 属性包装器注解所有可被观测的属性的要求,开发者可通过在类的层面上使用 @Observable 宏让该类的所有属性可被观测,如下面例子所示:


@Observable class Library {    var books: [Book] = [Book(), Book(), Book()]}
复制代码


对希望避免观测到特定属性的特殊情况而言,开发者可在该属性上使用 ObservationIgnored 宏。有意思的是,对所有使用 SwiftUI 和 Combine 构建应用的开发者而言,新框架的采用可逐步进行


Observation 框架无疑是一项重大创新,它将改变开发者构建 SwiftUI 代码的方式。SwiftUI 的最新迭代中同样包含对框架的渐进式改进,意在扩展其功能或追加开发者们习惯在 UIKit 中见到的功能。


对 ScrollView 中 scrollPosition 的追踪可能无疑是个颇受欢迎的小改进。在视图滚动到一个新位置时,scrollPosition 修改器将更新状态变量并将其识别为第一可见视图。反之,开发者也可赋值该状态变量以跳转到任意特定视图中。此外,开发者也可通过全新 ScrollTargetBehaviour 协议选择一个滚动行为。


随着对完成处理其的引入,SwiftUI 动画也得到了细微但却功能强大的扩展。这个不起眼的新功能让分段动画的定义成为可能,比如分阶段或分状态的(循环)动画。


开发者也可使用全新的 PhaseAnimator 视图迭代一系列的阶段,并为每一阶段定义特定动画,而不再需要直接通过完成处理器手动连接各个阶段才能构建分段动画。


SwiftUI 5 中也引入了两个新的手势,RotateGesture 和 MagnifyGesture,用于追踪视图的旋转和放大。RotateGesture 取代了原先的 RotationGesture,而 MagnifyGesture 则取代了原先的 MagnificationGesture。这两个新增的类提供了更为简化的语法,让视图的旋转和放大变换更易于应对。


这些新功能将于 iOS 17、iPadOS 17、macOS 17,以及苹果在明年秋季发布的其他操作系统中开始使用。关于 SwiftUI 中新功能的完整概述,可参见苹果于 WWDC 2023 的演示


原文链接

SwiftUI 5 Leaves Combine behind, Extends Animations, and More


相关阅读:

苹果推出 SwiftData,持久化框架的技术革新

Swift 5.8新特性预览:支持函数向后部署

2023-07-21 08:004236

评论

发布
暂无评论
发现更多内容

[Day33-01]-[二叉树] 路径总和

方勇(gopher)

LeetCode 二叉树 数据结构和算法

Kotlin 入门笔记(一)

如浴春风

5月月更

他们连夜跑路了,原因是我给数据开发的学弟学妹写了个实习生年终总结

袁袁袁袁满

C语言总结_字符串函数封装练习

DS小龙哥

5月月更

千万级学生管理系统的考试试卷存储方案设计

大眼喵

「架构实战营」

辛亥篇 「虛幣」起役《「內元宇宙」聯載》

因田木

類電子病歷

Continuous Integration 对 ABAP 技术栈来说意味着什么

Jerry Wang

持续集成 SAP abap 5月月更 持续优化

Git进阶系列 | 1. 创建完美的提交

俞凡

git 最佳实践

SpringSecurity 表单登录

急需上岸的小谢

5月月更

【51单片机】矩阵键盘

謓泽

5月月更 51单片机

nginx配置系列(四)请求限制

乌龟哥哥

5月月更

[Day32-05]-[BST] BST最近公共祖先

方勇(gopher)

LeetCode 二叉树 数据结构和算法

深度学习之解构卷积

AIWeker

人工智能 深度学习 卷积 convolution

设计千万级学生管理系统的考试试卷存储方案

唐诗宋词

[Day32-04]-[二叉树]二叉树的最近公共祖先

方勇(gopher)

LeetCode 二叉树 数据结构和算法

深入理解 Go 中的字符串

宇宙之一粟

字符串 Go 语言 5月月更

模块四:学生管理系统考试试卷存储方案

jiaoxn

「架构实战营」

架构实战营-模块四-作业

michael

架构实战营 #架构实战营 「架构实战营」

DevOps系列之 —— DevOps概览(一)软件产业和交付模式发展趋势

若尘

DevOps 5月月更

redis性能调优--内存使用率过高

en

redis 内存

MySQL三万字精华总结 + 面试100问吊打面试官绰绰有余

Java架构追梦

Java MySQL 程序员面试

Java 从一个 List 中删除重复的元素

HoneyMoose

Nation3云上国家--一场基于Web3的社会实验(32/100)

hackstoic

DAO web3 nation3

深度学习之解构基础网络结构

AIWeker

人工智能 深度学习 基础网络

Gitea 如何配置自定义页面

HoneyMoose

如何在网站上安装 WordPress

海拥(haiyong.site)

WordPress 5月月更

摸鱼即刻开始

程序员阿杜

运营好公众号需要具备的能力/技能

源字节1号

软件开发

千万级学生管理系统的考试试卷存储方案

高山觅流水

「架构实战营」

Java 如何逆向遍历一个 List

HoneyMoose

【建议收藏】Redis知识干货汇总

利志分享

redis 面试

开启UI开发新篇章,SwiftUI 5 不再使用Combine,扩展更多动画功能_Android/iOS_Sergio De Simone_InfoQ精选文章