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

SwiftUI 使用 visualEffect 视图修饰符

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

前言

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

介绍 visualEffect

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

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

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

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

什么是视觉效果?

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

visualEffect 修饰符视觉效果

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

visualEffect 视图修饰符支持可动画化的值。因此,你可以继续使用它根据视图在视图层次结构中的框架和边界来动画化视图的视觉外观。FNn28资讯网——每日最新资讯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 中打开并运行,选择合适的模拟器。请注意,由于视觉效果和动画效果,最好在模拟器上查看效果。FNn28资讯网——每日最新资讯28at.com

总结

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 帅气纯真少年!日本最帅初中生选美冠军出炉

    日本第一帅哥初一生选美大赛冠军现已正式出炉,冠军是来自千叶县的宗田悠良。日本一直热衷于各种选美大赛,从“最美JK”起到“最美女星&r
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • 新电商三兄弟,“抖快红”成团!

    来源:价值研究所作 者:Hernanderz 随着内容电商的概念兴起,抖音、快手、小红书组成的“新电商三兄弟”成为业内一股不可忽视的势力,给阿里、京东、拼多多带去了巨大压
  • 消费结构调整丨巨头低价博弈,拼多多还卷得动吗?

    来源:征探财经作者:陈香羽随着流量红利的退潮,电商的存量博弈越来越明显。曾经主攻中高端与品质的淘宝天猫、京东重拾“低价”口号。而过去与他们错位竞争的拼多多,靠
  • 华为HarmonyOS 4.0将于8月4日发布 或搭载AI大模型技术

    华为宣布HarmonyOS4.0将于8月4日正式发布。此前,华为已经针对开发者公布了HarmonyOS4.0,以便于开发者提前进行适配,也因此被曝光出了一些新系统的特性
  • Windows 11发布,微软一改往常对老机型开放的态度

    距离 Windows 11 发布已经过去一周,在过去一周里,很多数码爱好者围绕其对 Android 应用的支持、对老机型的升级问题展开了激烈讨论。与以往不同的是,在这次大
  • 苹果140W USB-C充电器:采用氮化镓技术

    据10 月 30 日 9to5 Mac 消息报道,当苹果推出新的 MacBook Pro 2021 时,该公司还推出了新的 140W USB-C 充电器,附赠在 MacBook Pro 16 英寸机型的盒子里,也支
Top