掌握 SwiftUI 中的 ScrollView

news2024/12/23 14:30:39

请添加图片描述
在这里插入图片描述

文章目录

    • 前言
    • scrollTransition 修饰符
    • ScrollTransitionPhase
    • 弹性动画
    • 总结

前言

SwiftUI 框架的第五个版本引入了许多与 ScrollView 相关的新 API,使其比以前更强大。本周将开始介绍 ScrollView 在 SwiftUI 中的新功能系列文章,首先我们将讨论滚动过渡。

scrollTransition 修饰符

全新的 scrollTransition 视图修饰符允许在用户滚动内容时观察视图的过渡。使我们能够了解视图是否在 ScrollView 的视口中,并允许应用视觉效果,如缩放、旋转等。让我们来看一个示例。

struct ContentView: View {
    var body: some View {
        ScrollView {
            ForEach(0..<10, id: \.self) { _ in
                Rectangle()
                    .fill(Color.random)
                    .frame(width: 300, height: 300)
                    .scrollTransition { view, transition in
                        view.opacity(transition.isIdentity ? 1 : 0.3)
                    }
            }
        }
    }
}

如上例所示,使用新的 scrollTransition 视图修饰符接受一个带有两个参数的闭包。第一个参数是没有任何效果的视图,第二个参数是 ScrollTransitionPhase 类型的实例。

ScrollTransitionPhase

ScrollTransitionPhase 类型定义了在 ScrollView 的视口中进行视图过渡的状态。ScrollTransitionPhase 类型是一个带有三个状态的枚举:topLeadingbottomTrailingidentityScrollTransitionPhase 枚举提供了 isIdentity 属性,使我们能够检查视图是否完成了过渡。

通常情况下,在标识阶段显示视图而没有任何效果。SwiftUI 框架会在过渡期间对应用的所有更改进行动画处理。在示例中,使用了 opacity 视图修饰符来在过渡期间改变视图的透明度。

ScrollTransitionPhase 枚举还提供了另一个名为 value 的属性。取值范围是 -1 到 1,定义了过渡的数值阶段,其中 -1 表示 topLeading,1 表示 bottomTrailing。可以利用在视图从 topLeading 过渡到 bottomTrailing 时进行比例缩放等视觉效果。

struct ContentView: View {
    var body: some View {
        ScrollView {
            ForEach(0..<10, id: \.self) { _ in
                Rectangle()
                    .fill(Color.random)
                    .frame(width: 300, height: 300)
                    .scrollTransition { view, transition in
                        view.scaleEffect(transition.isIdentity ? 1 : transition.value)
                    }
            }
        }
    }
}

如上例所示,我们使用 ScrollTransitionPhase 类型的 value 属性来在过渡阶段之间进行视图缩放。

scrollTransition 视图修饰符允许调整在插值过渡期间要使用的动画。

struct ContentView: View {
    var body: some View {
        ScrollView {
            ForEach(0..<10, id: \.self) { _ in
                Rectangle()
                    .fill(Color.random)
                    .frame(width: 300, height: 300)
                    .scrollTransition(.animated(.bouncy)) { view, transition in
                        view.scaleEffect(transition.isIdentity ? 1 : transition.value)
                    }
            }
        }
    }
}

弹性动画

在这里,使用弹性动画来在过渡阶段之间进行插值。可以使用几个选项来配置过渡:interactive(交互式)、animated(使用提供的特定动画)和 identity(禁用动画)。

struct ContentView: View {
    var body: some View {
        ScrollView {
            ForEach(0..<10, id: \.self) { _ in
                Rectangle()
                    .fill(Color.random)
                    .frame(width: 300, height: 300)
                    .scrollTransition(
                        topLeading: .identity,
                        bottomTrailing: .interactive
                    ) { view, transition in
                        view.rotationEffect(.radians(transition.value))
                    }
            }
        }
    }
}

还可以针对 topLeadingbottomTrailing 过渡使用不同的配置。在这个示例中,使用 identity 配置来禁用该方向上的过渡效果。

总结

新版的SwiftUI框架引入了scrollTransition视图修饰符,加强了ScrollView的功能。通过scrollTransition,我们可以在用户滚动内容时观察视图的过渡,从而应用透明度、缩放、旋转等视觉效果。scrollTransition的阶段包括topLeadingbottomTrailingidentity,并提供了isIdentityvalue属性,用于检测和调整过渡状态。这个功能为在ScrollView中实现各种视图过渡效果提供了更多灵活性和创意空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1063242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode: 918. 环形子数组的最大和 | 动态规划】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

关联规则挖掘(上):数据分析 | 数据挖掘 | 十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

【全方位带你配置yolo开发环境】快速上手yolov5

本文用于记录yolo开发环境的配置&#xff0c;以及我在配置中出现的各种问题&#xff0c;以供大伙参考。&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; 本人持续分享更多关于电子通信专业内容以及嵌入式和单片机的知识…

阿里云服务器ECS详细介绍_云主机_服务器托管_弹性计算

阿里云服务器ECS英文全程Elastic Compute Service&#xff0c;云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;阿里云提供多种云服务器ECS实例规格&#xff0c;如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等&#xff0c;阿里云服务器网分享阿…

使用css制作3D盒子,目的是把盒子并列制作成3D货架

1. 首先看效果&#xff08;第一个五颜六色的是透明多个面&#xff0c;第2-3都是只有3个面是我实际需要的&#xff0c;右边的有3个并列的正方体与3个并列的长方体&#xff09;&#xff1a; 长方体与正方体&#xff0c;所有代码&#xff1a; <!DOCTYPE html> <html lan…

汽车网络安全--安全芯片应用场景解析

​在聊汽车网络安全时,最先想到的就是使用芯片内置HSM,比如说英飞凌TC2xx系列的HSM、瑞萨RH850的ICU、NXP的HSE等等;实际上除了内置HSM,还有外置HSM(通过UART、SPI等通信)、安全存储芯片等等。而这些芯片统称为安全芯片。 安全芯片的主要作用是为整个系统建立起一个可信的…

【Java】类和接口的区别

1. 类和类的继承关系&#xff08;一个类只能单继承一个父类&#xff0c;不能继承n多个不同的父类&#xff09; 继承关系&#xff0c;只能单继承&#xff0c;但可以多层继承 2. 类和接口的实现关系&#xff08;一个类可以实现n多个不同的接口&#xff09; 实现关系&#xff0c;可…

【QT开发笔记-基础篇】| 第四章 事件QEvent | 4.4 鼠标按下、移动、释放事件

本章要实现的整体效果如下&#xff1a; QEvent::MouseButtonPress ​ 鼠标按下时&#xff0c;触发该事件&#xff0c;它对应的子类是 QMouseEvent QEvent::MouseMove ​ 鼠标移动时&#xff0c;触发该事件&#xff0c;它对应的子类是 QMouseEvent QEvent::MouseButtonRel…

golang gin框架1——简单案例以及api版本控制

gin框架 gin是golang的一个后台WEB框架 简单案例 package mainimport ("github.com/gin-gonic/gin""net/http" )func main() {r : gin.Default()r.GET("/ping", func(c *gin.Context) {//以json形式输出&#xff0c;还可以xml protobufc.JSON…

网络安全黑客究竟是什么?

“网络安全”是指任何活动旨在保护您的网络和数据的可用性和完整性。它包括硬件和软件技术。有效的网络安全管理对网络的访问。它针对的是一种不同的威胁,阻止他们进入或在您的网络传播。 网络安全是如何工作的呢? 网络安全结合多层防御的优势和网络。每个网络安全层实现政策…

前端TypeScript学习day01-TS介绍与TS常用类型

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 TypeScript 介绍 TypeScript 是什么 TypeScript 为什么要为 JS 添加类型支持&#xff1f; TypeScript 相…

【Redis】基础数据结构-quicklist

Redis List 在Redis3.2版之前&#xff0c;Redis使用压缩列表和双向链表作为List的底层实现。当元素个数比较少并且元素长度比较小时&#xff0c;Redis使用压缩列表实现&#xff0c;否则Redis使用双向链表实现。 ziplist存在问题 不能保存过多的元素&#xff0c;否则查找复杂度…

vue-devtools插件安装

拓展程序连接 链接&#xff1a;https://pan.baidu.com/s/1tEyZJUCEK_PHPGhU_cu_MQ?pwdr2cj 提取码&#xff1a;r2cj 一、打开谷歌浏览器&#xff0c;点击扩展程序-管理扩展程序 二、打开开发者模式&#xff0c;将vue-devtools.crx 拖入页面&#xff0c;点击添加扩展程序 成…

三、【色彩模式与颜色填充】

文章目录 Photoshop常用的几种颜色模式包括&#xff1a;1. RGB模式2. CMYK模式3. 灰度模式4. LAB模式5. 多通道模式 Photoshop颜色填充1.色彩基础2.拾色器认识3.颜色填充最后附上流程图&#xff1a; Photoshop常用的几种颜色模式包括&#xff1a; 1. RGB模式 详细可参考&…

mysql-sql执行流程

sql执行流程 MYSQL 中的执行流程 MYSQL 中的执行流程 sql 执行流程如下图

【Qt基础篇】信号和槽

文章目录 一些常见的bug&#xff1a;字符集不对产生的错误VS平台中文乱码 QT的优点关于.pro文件QtCreator快捷键最简单的qt程序按钮的创建对象模型**Qt窗口坐标**体系信号和槽机制connect函数系统自带的信号和槽案例&#xff1a;实现点击按钮-关闭窗口的案例 自定义信号和槽案例…

AWD常见防御加固手段

目录 一、加固用户名密码&#xff08;用户层&#xff09; 1、修改linux用户密码 2、删除其他可登录用户 二、加固SQL数据库&#xff08;服务层&#xff09; 1、修改mysql密码 2、删除匿名用户 3、刷新配置 4、改网站后台密码 三、后门文件查杀 四、关闭shell连接进程 …

安装rockylinux 9.2 版本虚拟机

下载rockylinux镜像 方法1&#xff1a;官网下载rockyliunx 方法2&#xff1a;阿里云镜像站下载 因为网络问题&#xff0c;我这里选择阿里云镜像站下载 VMware 安装Rckyliunx9.2版本虚拟机 或者 安装向导页面

LLM评估标准有哪些?

为了有效衡量和优化LLM的性能和泛化能力&#xff0c;并揭示其优势和局限&#xff0c;建立合理的LLM评价基准具有重要意义。现阶段&#xff0c;主流的LLM评估方法可划分为3类&#xff1a; 1&#xff09;人工评估。 基于人工的评估方法通常需要邀请大量的志愿者或相关领域专家对…

创意中秋与国庆贺卡 - 用代码为节日增添喜悦

目录 ​编辑 引言 贺卡的初始主题 - 中秋节 点击头像&#xff0c;切换至国庆主题 文本动画 用代码制作这个贺卡 获取完整代码&#xff08;简单免费&#xff09; 总结 引言 中秋佳节和国庆日是中国两个重要的传统节日&#xff0c;一个寓意团圆与祝福&#xff0c;另一个…