Animation/动画, Timing/时长动画, Transition/过渡动画 的使用

1. Animation 动画的使用

  1.1 实现

// 动画
struct AnimationBootcamp: View {
    @State var isAnimated: Bool = false
    
    var body: some View {
        VStack{
            Button("Botton") {
                //.repeatCount(5, autoreverses: false) // 循环五次动画
                //.repeatForever(autoreverses: true) // 一直循环动画
                withAnimation(
                    Animation
                        .default
                    //.repeatForever(autoreverses: true)
                ) {
                    isAnimated.toggle()
                }
            }
            
            Spacer()
            RoundedRectangle(cornerRadius: isAnimated ? 50 : 25.0)
                .fill(isAnimated ? Color.red : Color.green)
                .frame(
                    width: isAnimated ? 100 : 300,
                    height:isAnimated ? 100 : 300)
                .rotationEffect(Angle(degrees: isAnimated ? 360 : 0))
                .offset(y: isAnimated ? 300 :0)// 偏移
            //.animation(
            //    Animation
            //        .default
            //        .repeatForever(autoreverses: true))
            Spacer()
        }
    }
}

  1.2 效果图:

2. Animation Timing 时长动画的使用

  2.1 实现

/// 动画时长
struct AnimationTimingBootcamp: View {
    @State var isAnimating: Bool  = false
    let timing: Double = 1.0
    
    var body: some View {
        //animatingView1
        animatingView2
    }
    
    // 动画二
    var animatingView2: some View{
        VStack {
            Button("Button") {
                isAnimating.toggle()
            }
            
            RoundedRectangle(cornerRadius: 20)
                .frame(width: isAnimating ? 350 : 50, height: 100)
            // spring: 弹性
            // response: 应答时间 (0.5 为合适值)
            // dampingFraction: 反弹值 0-1 (0.6-0.7)为最合适的值
            // blendDuration: 持续时长/期间
                .animation(.spring(
                    response: 0.5,
                    dampingFraction: 0.5,
                    blendDuration: 1.0))
        }
    }
    
    // 动画一
    var animatingView1: some View{
        VStack{
            Button("Button") {
                isAnimating.toggle()
            }
            
            RoundedRectangle(cornerRadius: 20)
                .frame(width: isAnimating ? 350 : 50, height: 100)
                .animation(Animation.linear(duration: timing)) //linear 一样的速度进行动画
            
            RoundedRectangle(cornerRadius: 20)
                .frame(width: isAnimating ? 350 : 50, height: 100)
                .animation(Animation.easeIn(duration: timing)) //easeIn 开始缓慢,逐渐加快
            
            RoundedRectangle(cornerRadius: 20)
                .frame(width: isAnimating ? 350 : 50, height: 100)
                .animation(Animation.easeInOut(duration: timing)) //easeInOut 开始缓慢,然后稍微快一点,缓慢结束
            
            RoundedRectangle(cornerRadius: 20)
                .frame(width: isAnimating ? 350 : 50, height: 100)
                .animation(Animation.easeOut(duration: timing)) //easeOut 最快的速度开始,然后减速
        }
    }
}

  2.2 效果图:

    1) 动画一

    2) 动画二

3. Transition 过渡动画的使用

  3.1 实现

/// 过渡动画
struct TransitionBootcamp: View {
    @State var showView: Bool = false
    
    var body: some View {
        ZStack(alignment: .bottom) {
            VStack {
                Button("Button") {
                    showView.toggle()
                }
                Spacer()
            }
            if showView{
                RoundedRectangle(cornerRadius: 30)
                    .frame(height: UIScreen.main.bounds.height * 0.5)
                //.transition(.move(edge: .bottom)) // slide: 滑动  move: 移动
                //AnyTransition.opacity.animation(.easeInOut) // 可去掉 .animation(.easeInOut) 使用
                    .transition(.asymmetric(
                        insertion: .move(edge: .bottom), // 从底部移进
                        // .move(edge: .bottom) // 从底部退出
                        removal: AnyTransition.opacity.animation(.easeInOut) // 淡出
                    ))   // 从底部移除
                //.opacity(showView ? 1.0 : 0.0) // opacity : 透明度
                    .animation(.easeInOut) // 动画 .spring: 弹性
            }
        }
        .ignoresSafeArea(edges: .bottom)
    }
}

  3.2 效果图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hanyang Li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值