SwiftUI 动画库(最新开源)---- Pow

构建动画的Pow 近期开源了。这里简单的介绍一下使用以及效果。

变化效果

更改效果是每次值更改时都会触发视觉或触觉的效果。

使用changeEffect修饰符并传入一个AnyChangeEffect值来监视更改。

css 复制代码
Button {
    post.toggleLike()
} label: {
    Label(post.likes.formatted(), systemName: "heart.fill")
}
.changeEffect(.spray { heart }, value: post.likes, isEnabled: post.isLiked)
.tint(post.isLiked ? .red : .gray)

spray

发射多个不同色调和大小的粒子从原点向上移动的效果。

less 复制代码
 Button {
       isLiked.toggle()      
  } label: {        
     Label(likes.formatted(), systemImage: "heart.fill")      
  } .changeEffect(        
    .spray(origin: UnitPoint(x: 0.25, y: 0.5)) {          
        Image(systemName: "heart.fill").foregroundStyle(.red)        
   }, value: count).tint(isLiked ? .red : .gray)
  • 参数:

    • origin:粒子的起源。
    • layerParticleLayer渲染效果的位置,默认为local
    • particles:要发射的粒子。

jump

使视图跳跃给定高度,然后弹跳几次然后稳定。

scss 复制代码
HelloView().overlay(alignment: .topTrailing) { 
      NotificationBadge(count) 
 }.changeEffect(.jump(height: 100), value: count) 
  • 参数: height:跳跃的高度。
swift 复制代码
static func jump(height: CGFloat) -> AnyChangeEffect

pulse

添加一个或多个在视图后面缓慢生长并淡出的形状。 该形状将按当前色调样式着色。

less 复制代码
NotificationBadge(count).changeEffect(.pulse(shape: Circle(), count: 3), 

rise

从原点发射所提供的粒子并一边移动一边慢慢漂浮的效果。

less 复制代码
Button {
     stars += 1    
  } label: {        
      Label(stars.formatted(), systemImage: "star.fill")      
  }.changeEffect(       
     .rise(origin: UnitPoint(x: 0.75, y: 0.25)) {         
     Text("+1")        
  }, value: count).foregroundStyle(.yellow)
  • 参数:
    • origin:粒子的起源。
    • layerParticleLayer渲染效果的位置,默认为local
    • particles:要发射的粒子。
less 复制代码
static func rise(origin: UnitPoint = .center, layer: ParticleLayer = .local, @ViewBuilder _ particles: () -> some View) -> AnyChangeEffect

shake

发生变化时会晃动视图。

php 复制代码
SecureField("Password", text: $password)        
  .changeEffect(.shake(rate: .fast), value: loginAttempts)              
  .onSubmit {
      Task {            
        isProcessing = true            
        defer { isProcessing = false }            
        do {              
           try await login()            
        } catch {              
           loginAttempts += 1            
        }
      }
     }.disabled(isProcessing)        
     .textFieldStyle(.roundedBorder)
  • rate:震动的速率。
swift 复制代码
static func shake(rate: ShakeRate) -> AnyChangeEffect

shine

通过在视图上移动的光泽来突出显示视图。

less 复制代码
 Button("Submit") {
        submit()      
  }
  .disabled(!isFormValid)      
  .animation(.default, value: isFormValid)      
  .changeEffect(        
     .shine.delay(0.5),        
     value: isFormValid,        
     isEnabled: isFormValid      
  )    
}

通过在视图上移动的光泽来突出显示视图。 该角度是相对于水流的layoutDirection,0° 表示朝后缘扫掠,90° 表示朝底缘扫掠。

  • 参数:
    • angle:动画的角度。
    • duration:动画的持续时间。
swift 复制代码
static func shine(angle: Angle, duration: Double = 1.0) -> AnyChangeEffect

spin

当发生变化时,围绕给定轴旋转视图

scss 复制代码
NotificationBadge(count).changeEffect(.spin, value: count)

当发生变化时,围绕给定轴旋转视图。

  • 参数:

    • axis:指定旋转轴的 x、y 和 z 元素。
    • 锚点:默认中心位置,定义 3D 空间中旋转锚定的点。
    • anchorZ:默认值为 0 的位置,定义 3D 空间中旋转锚定的点。
    • 透视:此旋转的相对消失点,默认值为 1 / 6。
swift 复制代码
static func spin(axis: (x: CGFloat, y: CGFloat, z: CGFloat), anchor: UnitPoint = .center, anchorZ: CGFloat = 0, perspective: CGFloat = 1 / 6) -> AnyChangeEffect

delay

每个变化效果都可以延迟一段时间后触发效果。

less 复制代码
Button("Submit") { 
    <#code#>
}
.buttonStyle(.borderedProminent)
.disabled(name.isEmpty)
.changeEffect(.shine.delay(1), value: name.isEmpty, isEnabled: !name.isEmpty)
  • 参数:

    • delay:延迟(以秒为单位)。
swift 复制代码
func delay(_ delay: Double) -> AnyChangeEffect

其他更多的效果查看请前往github.com/EmergeTools... 以及 movingparts.io/pow 查看

相关推荐
不二狗12 小时前
每日算法 -【Swift 算法】不含重复字符的最长子串:暴力解法 vs 滑动窗口
开发语言·算法·swift
yulingqin3 天前
直接运行llamafile格式模型
swift
幸福回头6 天前
ms-swift 代码推理数据集
llm·swift
不二狗7 天前
每日算法 -【Swift 算法】Two Sum 问题:从暴力解法到最优解法的演进
开发语言·算法·swift
struggle20259 天前
适用于 iOS 的 开源Ultralytics YOLO:应用程序和 Swift 软件包,用于在您自己的 iOS 应用程序中运行 YOLO
yolo·ios·开源·app·swift
一丝晨光9 天前
数值溢出保护?数值溢出应该是多少?Swift如何让整数计算溢出不抛出异常?类型最大值和最小值?
java·javascript·c++·rust·go·c·swift
Swift社区9 天前
Swift实战:如何优雅地从二叉搜索树中挑出最接近的K个值
开发语言·ios·swift
fydw_7159 天前
大语言模型RLHF训练框架全景解析:OpenRLHF、verl、LLaMA-Factory与SWIFT深度对比
语言模型·swift·llama
文件夹__iOS10 天前
深入浅出 iOS 对象模型:isa 指针 与 Swift Metadata
ios·swift
I烟雨云渊T11 天前
iOS实名认证模块的具体实现过程(swift)
ios·cocoa·swift