【Day 26】SwiftUI - Drawing and Animation

Drawing and Animation - Animating Views and Transitions

这边主要是学 animation(:) 是怎麽使用的。

详细的教学请移动至官方网站的教学

这边主要纪录我觉得比较重要的地方:

在视图或物件处加上 .animation(.easeInOut) 或  .animation(.spring()),

就会有动画过度的效果。

上面分别为简单的两个效果。另外也可以试试看 .fluid 以及其他的效果。

除了官网之外更为详细的介绍可以查看下面两个连结:

Basics of SwiftUI Animation

在 SwiftUI 中设置渐变动画 (animated gradient) 的 3 个方法

知道大概运作的方式之後,官方的教学就把按钮与下面动画的开启和

关闭透过 withAnimation 绑定在一起。

下面为主要页面的程序码。


import SwiftUI

extension AnyTransition {
    static var moveAndFade: AnyTransition {
        let insertion = AnyTransition.move(edge: .trailing)
            .combined(with: .opacity)
        let removal = AnyTransition.scale
            .combined(with: .opacity)
        return .asymmetric(insertion: insertion, removal: removal)
    }
}

struct HikeView: View {
    var hike: Hike
    @State private var showDetail = false

    var body: some View {
        VStack {
            HStack {
                HikeGraph(hike: hike, path: \.elevation)
                    .frame(width: 50, height: 30)
                    .animation(nil)

                VStack(alignment: .leading) {
                    Text(hike.name)
                        .font(.headline)
                    Text(hike.distanceText)
                }

                Spacer()

                Button(action: {
                    withAnimation {
                        self.showDetail.toggle()
                    }
                }) {
                    Image(systemName: "chevron.right.circle")
                        .imageScale(.large)
                        .rotationEffect(.degrees(showDetail ? 90 : 0))
                        .scaleEffect(showDetail ? 1.5 : 1)
                        .padding()
                }
            }

            if showDetail {
                HikeDetail(hike: hike)
                    .transition(.moveAndFade)
            }
        }
    }
}

struct HikeView_Previews: PreviewProvider {
    static var previews: some View {
        VStack {
            HikeView(hike: ModelData().hikes[0])
                .padding()
            Spacer()
        }
    }
}

https://ithelp.ithome.com.tw/upload/images/20211011/20092056ebofOH6sUw.png

连我都觉得这篇写得很随便 呵呵.


<<:  输家的特质-2

>>:  Day29 - 集成学习 (ensemble learning) part2

[Day3] Vite 出小蜜蜂~ Game Loop!

Day3 软件架构 这边卡比要介绍一个名词, Software Architecture 软件架构。...

资料治理法规(Data Governance for Regulation)

关於资料治理中的安全性,适用於 欧盟的《通用数据保护条例》(GDPR) 和《 金融工具市场指令II》...

17.移转 Aras PLM大小事-用Excel复制料号去查询

我想看标题一定会困惑这是什麽 先解释一下使用者最常用Excel作报表 然後想复制之後快速查询特定料号...

甲方 vs 乙方

如果不懂甲方或者乙方在专案中的意思,我猜你大概一开始就是待在做自己产品的公司吧。不过就算都是在做产品...

React状态计算解密

点击进入React源码调试仓库。 概述 壹旦用户的交互产生了更新,那麽就会产生壹个update对象去...