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:) 方法中,使用数学公式计算按钮在垂直方向上的偏移,以实现弹跳效果。

相关文章
SwiftUI—使用withAnimation制作缩放和渐隐动画
SwiftUI—使用withAnimation制作缩放和渐隐动画
1060 0
实现场景切换的时候淡入淡出的效果(Unity3D)
在游戏中不可避免的要进行场景切换,如果切换的场景要加载的资源太多太大,那么就要耗时很长时间,这对于用户的体验来说很不舒服,也就是常说的游戏卡了。怎么解决这种尴尬呢。比较推荐的就是异步加载场景,然后中间加一个过渡场景,过渡场景做的美观一些,然后加一个进度条,看起来就不会那么尴尬了。然后在场景过渡的时候,加一个淡入淡出的效果,就很nice了今天就实现一个场景切换的时候淡入淡出的效果。剩下的场景异步加载还有中间过渡场景有时间再写。
|
8月前
|
开发工具 图形学 git
【实现100个unity特效之7】unity 3d实现各种粒子效果
【实现100个unity特效之7】unity 3d实现各种粒子效果
194 0
SwiftUI—如何制作样式丰富的过渡动画
SwiftUI—如何制作样式丰富的过渡动画
251 0
SwiftUI—如何制作样式丰富的过渡动画
|
8月前
|
图形学
【实现100个unity特效】shader实现3D物品闪光和描边效果
【实现100个unity特效】shader实现3D物品闪光和描边效果
152 0
|
8月前
|
开发工具 图形学
【推荐100个unity插件之11】Shader实现UGUI的特效——UIEffect为 Unity UI 提供视觉效果组件
【推荐100个unity插件之11】Shader实现UGUI的特效——UIEffect为 Unity UI 提供视觉效果组件
647 0
|
前端开发 容器 内存技术
用silverlight做动画-相机
用silverlight做动画-相机   适合初学者学习   做一个相机的动画 和做flash动画一样,准备好素材   将素材放入项目中 开始正式制作前为了方便以后重用,就把这个动画做成usercontrol(和flash中的‘MovieClip’概念是一样的) 创建一个UserControl 图片放入舞台中并且调整好位置 用钢笔在最上层画一个图像做遮罩使用,和flash中的概念一样。
722 0
|
8月前
|
图形学
【实现100个unity特效之5】unity2d 各种粒子特效
【实现100个unity特效之5】unity2d 各种粒子特效
337 0
|
图形学
unity动画之帧动画使用
使用unity实现lol寒冰帧动画

热门文章

最新文章