SwiftUI直通车系列(6)—— 使用动画

简介: SwiftUI直通车系列(6)—— 使用动画

一、使用属性动画

 属性动画是指当组件的属性发生变化时所展示动画效果,例如组件的颜色、位置、尺寸、旋转角度等。在SwiftUI中,我们知道要动态的对组件样式进行更改,需要使用状态来控制。我们也可以使用状态来控制动画动作。

  例如,我们定义一个按钮组件,当点击时,让其旋转180度,并略微放大,代码如下:

struct DrawContent:View {

@State private var begin = false
var body: some View {
    VStack(alignment: .center, spacing: 20) {
        Button(action: {
            self.begin.toggle()
        }) {
            Text("开始")
                .font(Font.system(size: 30))
                .rotationEffect(.degrees(self.begin ? 180 : 0))
                .scaleEffect(self.begin ? 2 : 1)
                .animation(.easeInOut(duration: 3))
                                    
        }
    }
}

}
其中,begin状态属性用来记录动画的状态,当一次点击此按钮时,会将当前按钮放大一倍,并旋转180度,再次点击按钮会动画还原。

  rotationEffect用来定义组件的旋转角度,scaleEffect用来定义组件缩放的比例,与之类似,大部分用来渲染视图样式的属性都支持进行动画。animation用来设置动画的执行方式,如上代码所示,设置的为easeInOut表示动画执行的过程采用渐入渐出的方式,且动画执行的时长为3秒。

二、使用转场动画

  属性动画用在组件的某些属性发生变化的场景,转场动画会影响组件的切换动作。当对组件进行展示或隐藏时,通常可以采用转场动画来处理。我们以上一篇博客自定义的图形组件为例,我们可以为其出现时加一个滑动动画,示例代码如下:

extension Animation {

static func custom() -> Animation {
    Animation.spring(response: 1.5, dampingFraction: 0.5, blendDuration: 0.5)
        .speed(2)
        .delay(0.03)
}

}

struct DrawContent:View {

@State private var begin = false
var body: some View {
    VStack(alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/, spacing: 20) {
        Button(action: {
            withAnimation {
                self.begin.toggle()
            }
        }) {
            Text("开始")
                .font(Font.system(size: 30))
                .rotationEffect(.degrees(self.begin ? 180 : 0))
                .scaleEffect(self.begin ? 2 : 1)
                .animation(.easeInOut(duration: 3))
                                    
        }
        if self.begin {
            ZStack{
                ForEach(0 ..< 10) { i in
                    DrawTestView(angle: Angle(degrees:Double(36*i))).opacity( 0.3)
                }
            }.animation(.custom())
            .transition(.slide)
        }

    }

}

}
如上代码所示,其中custom是我们自定义的一种动画模式,上面采用了阻尼动画,并自定义了动画的阻尼参数,速度,延时等属性。

目录
相关文章
|
测试技术 Swift iOS开发
探索iOS自动化测试:使用Swift编写UI测试
【8月更文挑战第31天】在软件开发的海洋中,自动化测试是保证船只不偏离航线的灯塔。本文将带领读者启航,深入探索iOS应用的自动化UI测试。我们将通过Swift语言,点亮代码的灯塔,照亮测试的道路。文章不仅会展示如何搭建测试环境,还会提供实用的代码示例,让理论知识在实践中生根发芽。无论你是新手还是有经验的开发者,这篇文章都将是你技能提升之旅的宝贵指南。
|
存储 数据管理 数据库
CoreData 在 swift UI 中的使用
当谈到在 Swift UI 中进行本地数据持久化,Core Data 是一个强大且常用的解决方案。Core Data 是苹果提供的一种数据存储和管理框架,用于在应用程序中创建、读取、更新和删除数据。它提供了一个对象图管理器,可以将数据映射到对象,并提供了一种简化数据操作的方式。在本文中,我们将深入介绍 Core Data 在 Swift UI 中的使用。
CoreData 在 swift UI 中的使用
SwiftUI 面面观
前言 Swift 5.1 新语法 单表达式隐式返回值 根据结构体默认成员合成默认初始化器 字符串插入运算符新设计 属性包装器 不透明返回类型 Swift Style DSL / Function Builder 其他新特性 Swift 从 3.x Attribute Swift/SwiftUI API Design Guide 值类型和引用类型
1592 0
|
iOS开发
SwiftUI直通车系列(3)—— 使用导航
SwiftUI直通车系列(3)—— 使用导航
383 0
SwiftUI直通车系列(3)—— 使用导航
|
前端开发 安全 程序员
详解 WWDC 20 SwiftUI 的重大改变及核心优势
随着 WWDC 20 相关新特性和介绍视频的释出,都明确的宣告着 SwiftUI 元年已经到了,SwiftUI 已经成长为新时代的布局引擎。 以下从几个方面分享关于 SwiftUI 的重大改变及核心优势。
3114 0
详解 WWDC 20 SwiftUI 的重大改变及核心优势
|
前端开发 Swift
Swift UI对Flutter的意义;JSConf 2019归来记;未来属于声明式编程丨体验科技精选第 4 期
这里是蚂蚁金服体验科技精选 第 4 期,本期内容包括原创精选、蚂蚁前端动态和行业动态,内涵福利。
5475 0
Swift UI对Flutter的意义;JSConf 2019归来记;未来属于声明式编程丨体验科技精选第 4 期
|
前端开发 Android开发 开发者
SwiftUI 初体验
前言 苹果在 WWDC 2019 的开幕式中给我们来带了超多的惊喜,全新的iPad OS, 给生产力和商业带来了新领域,iOS 项目可以通过简单的修改移植到 Mac OS 上,全新的 Mac Pro 高清的显示器等新硬件,但对于在苹果平台的开发者们,最重要的莫过于 Swift UI。
6154 0
swift UI专项训练4 场景过渡-转场
    上一话中我们创建了两个场景,这一话我们想要实现两个场景间的过渡。我们只需要增加一个导航条。
915 0
|
iOS开发
swift UI专项训练5 定制视图控制器
  我们现在已经添加了两个场景了,尽管我们有默认的视图控制器,但是我们还是想自己定制一下自己的控制器,我们之前一直在storyboard上做操作,现在来些一些代码。
931 0
Swift UI专项训练6 反向过渡
  上一话中我们第二个场景设置过渡的时候选择的是modal类型,不是push。所以用户输入后需要手工返回。
917 0

相关课程

更多