前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SwiftUI:视图的显示和隐藏动画

SwiftUI:视图的显示和隐藏动画

作者头像
韦弦zhy
发布于 2020-04-16 11:16:00
发布于 2020-04-16 11:16:00
4.8K00
代码可运行
举报
运行总次数:0
代码可运行

SwiftUI最强大的功能之一是能够自定义视图的显示和隐藏方式。以前,您已经了解了如何使用常规if条件有条件地包含视图,这意味着当条件更改时,我们可以从视图层次结构中插入或移除视图。

转换控制插入和删除的方式,我们可以使用内置转换,以不同的方式组合它们,甚至创建完全自定义的转换。

为了演示这一点,这里有一个带有按钮和矩形的VStack

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct ContentView: View {
    var body: some View {
        VStack {
            Button("Tap Me") {
                // do nothing
            }

            Rectangle()
                .fill(Color.red)
                .frame(width: 200, height: 200)
        }
    }
}

我们可以让矩形只有满足一定的条件时才能出现。首先,我们添加一些可以操作的状态:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@State private var isShowingRed = false

接下来,我们使用该状态作为显示矩形的条件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if isShowingRed {
    Rectangle()
        .fill(Color.red)
        .frame(width: 200, height: 200)
}

最后,我们可以在按钮的点击事件中将isShowingRed在“true”和“false”之间切换:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
self.isShowingRed.toggle()

如果你运行程序,你会看到按下按钮显示或者隐藏红色方块。没有动画;它只是突然出现和消失。

通过使用withAnimation()包装状态更改,我们可以获得SwiftUI的默认视图转换,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
withAnimation {
    self.isShowingRed.toggle()
}

有了这个小小的改变,应用程序现在淡入淡出红色矩形,同时向上移动按钮以腾出空间。看起来不错,但是我们可以使用transition()修饰符做得更好。

例如,我们可以通过向矩形添加transition()修饰符使其上下缩放,如图所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Rectangle()
    .fill(Color.red)
    .frame(width: 200, height: 200)
    .transition(.scale)

现在点击按钮看起来好多了:当按钮腾出空间时,矩形会放大,当再次点击时,矩形会缩小。(PS: 直接在Canvas运行效果可能有差别,所以还是在模拟器或者真机运行查看实际效果吧)

如果你想尝试的话,你可以尝试一些其他的转换。一个有用的方法是不对称,它允许我们在显示视图时使用一个转换,在视图消失时使用另一个转换。若要尝试,请将矩形的现有过渡替换为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.transition(.asymmetric(insertion: .scale, removal: .opacity))

译自Showing and hiding views with transitions

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
为什么SwiftUI修饰符顺序很重要?
每当我们将修饰符应用于SwiftUI视图时,我们实际上都会创建一个应用了更改的新视图——我们不仅会修改现有的视图。如果您考虑一下,这种行为是有道理的——我们的视图仅保留我们赋予它们的确切属性,因此,如果我们设置背景颜色或字体大小,则无处存储该数据。
韦弦zhy
2020/03/26
2.4K0
SwiftUI-ScrollView进化史
ScrollView 即滚动视图,在 iOS 开发中扮演着非常重要的角色。但在 SwiftUI 的发展史上,ScrollView 一直处于“残废”的状态,直到 SwiftUI 6.0 才逐渐补齐短板。下面详细讲解 SwiftUI 中 ScrollView 的进化史。
YungFan
2025/02/10
850
SwiftUI 的动画机制
大多初学者都会在第一时间惊叹于 SwiftUI 轻松实现各种动画效果的能力,但经过一段时间的使用后,他们会发现 SwiftUI 的动画并非像表面上看起来那样容易驾驭。开发者经常需要面对:如何动、怎么动、什么能动、为什么不动、为什么这么动、如何不让它动等等困扰。对 SwiftUI 的动画处理逻辑了解的不够深入是造成上述困扰的主要原因。本文将尝试对 SwiftUI 的动画机制做以介绍,以帮助大家更好地学习、掌握 SwiftUI 的动画,制作出满意的交互效果。
东坡肘子
2022/07/28
14.9K0
SwiftUI 的动画机制
掌握 Transaction,实现 SwiftUI 动画的精准控制
SwiftUI 因其简便的动画 API 与极低的动画设计门槛而广受欢迎。但是,随着应用程序复杂性的增加,开发者逐渐发现,尽管动画设计十分简单,但要实现精确细致的动画控制并非易事。同时,在 SwiftUI 的动画系统中,有关 Transaction 的解释很少,无论是官方资料还是第三方文章,都没有对其运作机制进行系统的阐述。
东坡肘子
2023/07/08
5750
掌握 Transaction,实现 SwiftUI 动画的精准控制
SwiftUI:特殊效果 - 模糊,混合模式等
SwiftUI使我们能够出色地控制视图的呈现方式,包括应用实时模糊,混合模式,饱和度调整等功能。
韦弦zhy
2020/05/08
2.7K0
SwiftUI geometryGroup() 指南:从原理到实践
在 WWDC 2023 中,苹果为 SwiftUI 添加了一个新的修饰器:geometryGroup()。它可以解决一些之前无法处理或处理起来比较困难的动画异常。本文将介绍 geometryGroup() 的概念、用法,以及在低版本 SwiftUI 中,在不使用 geometryGroup() 的情况下如何处理异常。
东坡肘子
2023/11/30
3500
SwiftUI geometryGroup() 指南:从原理到实践
SwiftUI-ScrollView进化史
ScrollView 即滚动视图,在 iOS 开发中扮演着非常重要的角色。但在 SwiftUI 的发展史上,ScrollView 一直处于“残废”的状态,直到 SwiftUI 6.0 才逐渐补齐短板。下面详细讲解 SwiftUI 中 ScrollView 的进化史。
YungFan
2025/02/09
1190
SwiftUI 布局 —— 尺寸( 下 )
在 上篇[3] 中,我们对 SwiftUI 布局过程中涉及的众多尺寸概念进行了说明。本篇中,我们将通过对视图修饰器 frame 和 offset 的仿制进一步加深对 SwiftUI 布局机制的理解,并通过一些示例展示在布局时需要注意的问题。
东坡肘子
2022/07/28
2.7K0
SwiftUI 布局 —— 尺寸( 下 )
用 SwiftUI 的方式进行布局
最近时常有朋友反映,尽管 SwiftUI 的布局系统学习门槛很低,但当真正面对要求较高的设计需求时,好像又无从下手。SwiftUI 真的具备创建复杂用户界面的能力吗?本文将通过用多种手段完成同一需求的方式,展示 SwiftUI 布局系统的强大与灵活,并通过这些示例让开发者对 SwiftUI 的布局逻辑有更多的认识和理解。
东坡肘子
2023/03/08
4.9K2
用 SwiftUI 的方式进行布局
深入了解 SwiftUI 5 中 ScrollView 的新功能
为可滚动容器的内容或滚动指示器(Scroll Indicator)添加外边距(Margin)。
东坡肘子
2023/07/08
1K0
深入了解 SwiftUI 5 中 ScrollView 的新功能
SwiftUI案例:自定义加载动画
案例通过在间隔时间内不断控制变量 animateBall:Bool 与 animateRotation:Bool 的值来间接地实现动画效果;
DioxideCN
2022/08/05
2.1K0
SwiftUI案例:自定义加载动画
SwiftUI: 使用 ImagePaint 制作边框和填充
SwiftUI严重依赖于协议,使用绘图时可能会有些混乱。例如,我们可以将Color用作视图,但它也符合ShapeStyle——用于填充,笔触和边框的另一种协议。
韦弦zhy
2020/05/08
1.8K0
在 SwiftUI 中用 zIndex 调整视图显示顺序
本文将对 SwiftUI 的 zIndex 修饰符做以介绍,包括:使用方法、zIndex 的作用域、通过 zIndex 避免动画异常、为什么 zIndex 需要设置稳定的值以及在多种布局容器内使用 zIndex 等内容。
东坡肘子
2022/07/28
1.9K0
在 SwiftUI 中用 zIndex 调整视图显示顺序
探索 SwiftUI 基本手势
在 SwiftUI 中,我们可以通过添加不同的交互来使我们的应用程序更具交互性,这些交互可以响应我们的点击,点击和滑动。
Swift社区
2021/11/26
2.2K0
探索 SwiftUI 基本手势
高级 SwiftUI 动画 — Part 1:Paths
在本文中,我们将深入探讨一些创建 SwiftUI 动画的高级技术。我将广泛讨论 Animatable[1] 协议,它可靠的伙伴 animatableData[2],强大但经常被忽略的 GeometryEffect[3] 以及完全被忽视但全能的 AnimatableModifier[4] 协议。
Swift社区
2022/04/04
3.9K0
高级 SwiftUI 动画 — Part 1:Paths
掌握 SwiftUI 的 Safe Area
Safe Area(安全区域)是指不与导航栏、标签栏、工具栏或其他视图控制器提供的视图重叠的内容空间。
东坡肘子
2022/07/28
7.9K0
掌握 SwiftUI 的 Safe Area
SwiftUI-GeometryReader
GeometryReader中有一个GeometryProxy,它也是一个结构体,定义如下:
YungFan
2020/07/20
2K0
解析SwiftUI布局细节(二)循环轮播+复杂布局
上一篇我们总结的主要是VStack里面的东西,由他延伸到 @ViewBuilder, 接着我们上一篇总结的我们这篇内容主要说的是下面的几点,在这些东西说完后我准备解析一下苹果在SiwftUI文档中说道的比较好玩的一个东西,具体的我们后面在看。这篇我们还是说我们关于SwiftUI的东西,再提一下Demo代码我已经提交上Git了,目前Demo进度为一级页面基本上结束,地图点击大头针的添加也刚处理完,代码有需要的小伙伴可以去Git看看,项目地址
Mr.RisingSun
2021/01/06
12.4K1
解析SwiftUI布局细节(二)循环轮播+复杂布局
掌握 ViewThatFits
在 iOS 16 中,SwiftUI 增加了一个新的自适应布局容器 ViewThatFits。正如其名称所示,它的作用是在给定的多个视图中找出最合适的视图并使用。对于大多数人来说,这是一个简单易用的容器。不过,本文打算对其进行彻底的剖析,包括规则细节、理想尺寸的含义、使用示例等。最后,我们将创建一个复刻版本的 ViewThatFits,以加深对其的认识和理解。
东坡肘子
2023/11/17
2840
掌握 ViewThatFits
在 SwiftUI 下定制手势
不同于众多的内置控件,SwiftUI 没有采用对 UIGestureRecognizer(或 NSGestureRecognizer)进行包装的形式,而是重构了自己的手势体系。SwiftUI 手势在某种程度上降低了使用门槛,但由于缺乏提供底层数据的 API,严重制约了开发者的深度定制能力。在 SwiftUI 下,我们无法拥有类似构建全新 UIGestureRecongnizer 的能力。所谓的自定义手势,其实只是对系统预置手势的重构而已。本文将通过几个示例,演示如何使用 SwiftUI 提供的原生手段定制所需手势。
东坡肘子
2022/07/28
2.8K0
在 SwiftUI 下定制手势
相关推荐
为什么SwiftUI修饰符顺序很重要?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验