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

SwiftUI 使用 visualEffect 视图修饰符

来源: 责编: 时间:2024-01-02 09:31:29 318观看
导读前言在 WWDC 23 中,SwiftUI 引入了一个名为 visualEffect 的新视图修饰符。此修饰符允许我们通过访问特定视图的布局信息来附加一组可动画化的视觉效果。下面我们将学习如何在 SwiftUI 中使用新的 visualEffect 视图修

前言

在 WWDC 23 中,SwiftUI 引入了一个名为 visualEffect 的新视图修饰符。此修饰符允许我们通过访问特定视图的布局信息来附加一组可动画化的视觉效果。下面我们将学习如何在 SwiftUI 中使用新的 visualEffect 视图修饰符。YWs28资讯网——每日最新资讯28at.com

介绍 visualEffect

让我们从使用 visualEffect 视图修饰符的最简单示例开始。YWs28资讯网——每日最新资讯28at.com

struct ContentView: View {    var body: some View {        Text("Hello World!")            .visualEffect { initial, geometry in                initial.offset(geometry.size)            }    }}

正如你在上面的示例中所看到的,我们定义了一个文本视图并附加了 visualEffect 视图修饰符。每当你附加 visualEffect 视图修饰符时,你应该指定效果闭包。这是你应用所有需要的效果的地方。YWs28资讯网——每日最新资讯28at.com

效果闭包为你提供了两个参数。第一个是附加到视图的效果集合的初始状态。它是 EmptyVisualEffect 类型的实例。我们使用此实例来附加额外的效果。第二个参数是包含视图的所有布局信息的 GeometryProxy 类型的实例,比如 frame、安全区域等。YWs28资讯网——每日最新资讯28at.com

什么是视觉效果?

视觉效果是可以改变视图的视觉外观但不影响其布局的任何东西。在 SwiftUI 框架的先前版本中,我们有视图修饰符,如缩放、偏移、模糊、对比度、饱和度、不透明度、旋转等。它们全部都是视觉效果,并且现在符合 VisualEffect 协议。你可以在 visualEffect 闭包中使用其中任何一个。YWs28资讯网——每日最新资讯28at.com

struct ContentView: View {        var body: some View {        Text("Hello World!")            .visualEffect { initial, geometry in                initial                    .blur(radius: 8)                    .opacity(0.9)                    .scaleEffect(.init(width: 2, height: 2))            }    }}

像 frame 和 padding 这样的东西不是视觉效果,你不能在 visualEffect 闭包中使用它们,因为它们修改了视图层次结构的布局。YWs28资讯网——每日最新资讯28at.com

visualEffect 修饰符视觉效果

visualEffect 视图修饰符是完成旧事物的新方法。我们可以使用旧视图修饰符修改视图的不透明度和偏移。如果你不需要布局信息,你可以继续使用它们。新方法的唯一区别是我们通过从 GeometryProxy 提供的布局信息计算视图的视觉效果的方式来限定视图的视觉效果。YWs28资讯网——每日最新资讯28at.com

visualEffect 视图修饰符支持可动画化的值。因此,你可以继续使用它根据视图在视图层次结构中的框架和边界来动画化视图的视觉外观。YWs28资讯网——每日最新资讯28at.com

struct ContentView: View {    @State private var isScaled = false        var body: some View {        VStack {            Button("Scale") {                isScaled.toggle()            }                        Text("Hello World!")                .visualEffect { initial, geometry in                    initial.scaleEffect(                        CGSize(                            width: isScaled ? 2 : 1,                            height: isScaled ? 2 : 1                        )                    )                }                .animation(.smooth, value: isScaled)        }    }}

完整的代码

import SwiftUIstruct ContentView: View {    var body: some View {        Text("Hello World!")            .visualEffect { initial, geometry in                initial.offset(geometry.size)            }    }}struct ContentViewWithEffects: View {    var body: some View {        Text("Hello World!")            .visualEffect { initial, geometry in                initial                    .blur(radius: 8)                    .opacity(0.9)                    .scaleEffect(.init(width: 2, height: 2))            }    }}struct ContentViewWithAnimation: View {    @State private var isScaled = false        var body: some View {        VStack {            Button("Scale") {                isScaled.toggle()            }                        Text("Hello World!")                .visualEffect { initial, geometry in                    initial.scaleEffect(                        CGSize(                            width: isScaled ? 2 : 1,                            height: isScaled ? 2 : 1                        )                    )                }                .animation(.smooth, value: isScaled)        }    }}struct ContentView_Previews: PreviewProvider {    static var previews: some View {        ContentView()        ContentViewWithEffects()        ContentViewWithAnimation()    }}

将上述代码放入 Swift 文件中,然后在 Xcode 中打开并运行,选择合适的模拟器。请注意,由于视觉效果和动画效果,最好在模拟器上查看效果。YWs28资讯网——每日最新资讯28at.com

总结

本文章介绍了在 SwiftUI 中引入的新视图修饰符 visualEffect。该修饰符允许我们通过访问特定视图的布局信息来附加一组可动画的视觉效果。给出了一些使用 visualEffect 的简单示例,包括如何使用效果闭包以及如何应用一些常见的视觉效果(例如模糊、透明度、缩放)。YWs28资讯网——每日最新资讯28at.com

此外,还提到了 GeometryProxy 类型的使用,以及 visualEffect 对可动画值的支持,使得可以根据视图的帧和边界来动态调整视觉外观。YWs28资讯网——每日最新资讯28at.com

最后,指出了 visualEffect 修饰符在向后兼容性方面的注意事项,并建议在不需要布局信息的情况下继续使用传统的视图修饰符。YWs28资讯网——每日最新资讯28at.com

YWs28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-55248-0.htmlSwiftUI 使用 visualEffect 视图修饰符

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

上一篇: SwiftUI 使用 visualEffect 视图修饰符

下一篇: 深入了解Java 8 新特性:Optional类的实践应用

标签:
  • 热门焦点
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了“本地生活”入口,位置较深,位于首页的“充值中心”内,目前主要售卖美食相关的
  • 3699元!iQOO Neo8 Pro顶配版今日首销:1TB UFS 4.0同价位唯一

    5月23日,iQOO推出了全新的iQOO Neo8系列,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更是首发搭载了联发科天玑9200+旗舰
  • iQOO Neo8 Pro即将开售:到手价3099元起 安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
  • 世界人工智能大会国际日开幕式活动在世博展览馆开启

    30日上午,世界人工智能大会国际日开幕式活动在世博展览馆开启,聚集国际城市代表、重量级院士专家、国际创新企业代表,共同打造人工智能交流平台。上海市副市
  • 荣耀Magic4 至臻版 首创智慧隐私通话 强劲影音系统

    2022年第一季度临近尾声,在该季度内,许多品牌陆续发布自己的最新产品,让大家从全新的角度来了解当今的手机技术。手机是电子设备中,更新迭代十分迅速的一款产品,基
Top