SwiftUI 中淡入淡出特效

简介: SwiftUI 中淡入淡出特效

SwiftUI 中淡入淡出特效

>
>

import SwiftUI

struct Bounce: AnimatableModifier {
    
   let animCount: Int
   var animValue: CGFloat
   var amplitude: CGFloat  // 振幅
   var bouncingTimes: Int

   init(animCount: Int, amplitude: CGFloat = 10, bouncingTimes: Int = 3) {
    
       self.animCount = animCount
       self.animValue = CGFloat(animCount)
       self.amplitude = amplitude
       self.bouncingTimes = bouncingTimes
   }

   var animatableData: CGFloat {
    
       get {
     animValue }
       set {
     animValue = newValue }
   }

   func body(content: Content) -> some View {
    
       let t = animValue - CGFloat(animCount)
       let offset: CGFloat = -abs(pow(CGFloat(M_E), -t) * sin(t * .pi * CGFloat(bouncingTimes)) * amplitude)
       return content.offset(y: offset)
   }
}

struct InOut: Animatable {
    

}

extension View {
    
   func bounce(animCount: Int,
               amplitude: CGFloat = 10,
               bouncingTimes: Int = 3) -> some View {
    
       self.modifier(Bounce(animCount: animCount,
                            amplitude: amplitude,
                            bouncingTimes: bouncingTimes))
   }
}

struct ContentView: View {
    
   @State var taps = 0

   var body: some View {
    
       VStack{
    
       Button(action: {
    
           withAnimation(Animation.linear(duration: 1)) {
    
               taps += 1
           }
       }, label: {
    
           RoundedRectangle(cornerRadius: 15)
               .bounce(animCount: taps)
       })
       .frame(width: 100, height: 100)

       Button(action: {
    taps += 1}, label: {
    
           Image(systemName: "person")
               .resizable()
       })
       .frame(width: 100, height: 100)
       .background(Color.red)



       }

   }
}

Bounce是一个自定义的动画修饰器(Modifier),用于实现按钮的弹跳效果。它采用 AnimatableModifier 协议,其中包括了动画计数、振幅和弹跳次数等参数。animatableData 属性允许 SwiftUI 动画系统追踪 animValue 的变化。在 body(content:) 方法中,使用数学公式计算按钮在垂直方向上的偏移,以实现弹跳效果。

相关文章
|
存储 iOS开发
SwiftUI极简教程17:Gestures手势的使用
SwiftUI极简教程17:Gestures手势的使用
804 0
SwiftUI极简教程17:Gestures手势的使用
|
存储 索引
SwiftUI极简教程19:SwipeCard卡片滑动效果的使用(下)
SwiftUI极简教程19:SwipeCard卡片滑动效果的使用(下)
551 0
SwiftUI极简教程19:SwipeCard卡片滑动效果的使用(下)
|
程序员 索引
SwiftUI极简教程18:SwipeCard卡片滑动效果的使用(上)
SwiftUI极简教程18:SwipeCard卡片滑动效果的使用(上)
875 0
SwiftUI极简教程18:SwipeCard卡片滑动效果的使用(上)
|
JSON Android开发 数据格式
原生app开发技巧——底部导航栏动画效果按钮制作方法之采用photoshop制作gif动画-过渡动画关键帧
原生app开发技巧——底部导航栏动画效果按钮制作方法之采用photoshop制作gif动画-过渡动画关键帧
原生app开发技巧——底部导航栏动画效果按钮制作方法之采用photoshop制作gif动画-过渡动画关键帧
|
前端开发 开发工具
教你用HTML+CSS实现百叶窗动画效果
我们浏览网页的时候总能看见一些炫酷的特效,比如百叶窗效果,本文我们就用HTML+CSS制作一个百叶窗小项目,适合刚学前端的小伙伴,使用代码简单易懂,很容易上手,学习完本文后,相信你也能敲出来属于自己的百叶窗效果,改变图片及相应盒子的大小,有女朋友的可以试着放几张在一起的照片,也是一件非常浪漫的事
447 0
教你用HTML+CSS实现百叶窗动画效果
|
存储 Swift
SwiftUI极简教程38:ScrollViewReader滚动视图锚点的使用
在本章中,你将学会ScrollViewReader滚动视图锚点的使用。
703 0
SwiftUI极简教程38:ScrollViewReader滚动视图锚点的使用
SwiftUI—使用withAnimation制作缩放和渐隐动画
SwiftUI—使用withAnimation制作缩放和渐隐动画
910 0
SwiftUI—使用withAnimation制作缩放和渐隐动画
SwiftUI—如何制作样式丰富的过渡动画
SwiftUI—如何制作样式丰富的过渡动画
201 0
SwiftUI—如何制作样式丰富的过渡动画
实现场景切换的时候淡入淡出的效果(Unity3D)
在游戏中不可避免的要进行场景切换,如果切换的场景要加载的资源太多太大,那么就要耗时很长时间,这对于用户的体验来说很不舒服,也就是常说的游戏卡了。怎么解决这种尴尬呢。比较推荐的就是异步加载场景,然后中间加一个过渡场景,过渡场景做的美观一些,然后加一个进度条,看起来就不会那么尴尬了。然后在场景过渡的时候,加一个淡入淡出的效果,就很nice了今天就实现一个场景切换的时候淡入淡出的效果。剩下的场景异步加载还有中间过渡场景有时间再写。