50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

开启 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:005054

评论

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

ArrayList哪种循环效率更好你真的清楚吗

root

Java 后端 ArrayList 循环效率 方式

架构师训练营第三周学习总结

张明森

Java操作Excel竟如此简单

生命在于折腾

Java EasyExcel

终于有人把 java代理 讲清楚了,万字详解!

root

Java jdk 后端 动态代理 cglib

【Golang runtime学习笔记-启动过程分析】

卓丁

初始化 runtime 汇编 Go 语言

在项目中随手把haseMap改成了currenHaseMap差点被公司给开除了

root

Java 后端 BigDecimal金额 Arrays.asList

从拼多多突破阿里和京东两大巨头绞杀,市值破千亿美金来看职业价值链

非著名程序员

程序员 程序人生 职业规划 职业成长

效率思维模式与Zombie Scrum

易成研发中心

敏捷开发

LeetCode | 4. Palindrome Number 回文数

Puran

Python C# 算法 LeetCode

优化工程师逻辑视角下的微信“拍一拍”功能

Earth_Polarbear

人工智能 微信 系统工程 优化逻辑

策略模式解析

Seven七哥

设计模式 策略模式

实现一个redis命令--nonzerodecr

老胡爱分享

redis 源码分析 源码阅读

由一次管理后台定时推送功能引发的对 RabbitMQ 延迟队列的思考 (二)

LSJ

Java RabbitMQ 延迟队列 优先级队列

架构师训练营 - 第 2 周命题作业

红了哟

架构师训练营第二周作业

陈靓-哲露

[安利] 可能会让你爱上书写的工具组合!

猴哥一一 cium

Typora markdown markdown编辑器 玩转写作平台

[架构师训练营] 2 依赖倒置

悬浮

啥是CPU缓存?又如何提高缓存命中率呢?

八两

架构师训练营 - 第2周学习总结

红了哟

大话设计模式 | 3. SOLID原则

Puran

设计模式

程序员的晚餐 | 6 月 20 日 随便牛肉和翡翠白玉

清远

美食

如何做好职场印象管理?

石云升

职场 印象管理 职场形象

一款跨平台免费的开源 SQL 编辑器和数据库管理器!

JackTian

数据库 sql GitHub 开源 实用工具

golang-pprof实战笔记

卓丁

pprof 性能分析 Go 语言

SpringIOC 是依赖倒置吗?

yupi

软件设计原则

yupi

Kafka面试题:基础27问,必须都会的呀!

Java小咖秀

大数据 kafka 分布式 队列 延时消息

游戏夜读 | RPG的美式和日式

game1night

Git 基础知识学习

LeoBing

架构师第二周学习总结

陈靓-哲露

区块链系列教程之:比特币的钱包与交易

程序那些事

比特币 区块链 智能合约 钱包 交易

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