SAM2-Demo/Ripple/RippleViewModifier.swift (43 lines of code) (raw):
//
// RippleViewModifier.swift
// HuggingChat-Mac
//
// Created by Cyril Zakka on 8/28/24.
//
import SwiftUI
struct RippleEffect<T: Equatable>: ViewModifier {
var origin: CGPoint
var trigger: T
var amplitude: Double
var frequency: Double
var decay: Double
var speed: Double
init(at origin: CGPoint, trigger: T, amplitude: Double = 12, frequency: Double = 15, decay: Double = 8, speed: Double = 1200) {
self.origin = origin
self.trigger = trigger
self.amplitude = amplitude
self.frequency = frequency
self.decay = decay
self.speed = speed
}
func body(content: Content) -> some View {
let origin = origin
let duration = duration
let amplitude = amplitude
let frequency = frequency
let decay = decay
let speed = speed
content.keyframeAnimator(
initialValue: 0,
trigger: trigger
) { view, elapsedTime in
view.modifier(RippleModifier(
origin: origin,
elapsedTime: elapsedTime,
duration: duration,
amplitude: amplitude,
frequency: frequency,
decay: decay,
speed: speed
))
} keyframes: { _ in
MoveKeyframe(0)
LinearKeyframe(duration, duration: duration)
}
}
var duration: TimeInterval { 3 }
}