Easing Logo

Easing 库是一个全面的缓动函数集,可用于交互式过渡和其他基于时间的计算。

特性

用法

基础

let startValue = 20.0
let endValue = 60.0
let progress = 0.5  // Assume a progress variable that ranges from 0 to 1

let valueAtProgress = Easing.cubicEaseIn.calculate(
    d1: startValue,
    d2: endValue,
    g: progress
)

真实世界示例

想象一下与 UIScrollView 的交互,当内容偏移为零时,其标题完全可见,而当内容偏移超过 100 个点时,标题完全淡出。您可以使用以下代码在您的 scrollViewDidScroll 方法中表达此行为

let minOffset = 0.0
let alphaForMinOffset = 0.0
let maxOffset = 100.0
let alphaForMaxOffset = 1.0
let offset = scrollView.contentOffset.y

headerView.alpha = Easing.quadraticEaseInOut.calculate(
    g1: minOffset,
    d1: alphaForMinOffset,
    g2: maxOffset,
    d2: alphaForMaxOffset,
    g: offset
)

可插值

let startTransform = CGAffineTransform.identity
let endTransform = CGAffineTransform(scaleX: 2, y: 2)
let progress = 0.5  // Assume a progress variable that ranges from 0 to 1

view.transform = startTransform.interpolate(to: endTransform,
                                      progress: progress,
                                        easing: .linear)

参考

缓动 曲线
.linear
.smoothStep
.smootherStep
.quadraticEaseIn
.quadraticEaseOut
.quadraticEaseInOut
.cubicEaseIn
.cubicEaseOut
.cubicEaseInOut
.quarticEaseIn
.quarticEaseOut
.quarticEaseInOut
.quinticEaseIn
.quinticEaseOut
.quinticEaseInOut
.sineEaseIn
.sineEaseOut
.sineEaseInOut
.circularEaseIn
.circularEaseOut
.circularEaseInOut
.exponentialEaseIn
.exponentialEaseOut
.exponentialEaseInOut
.elasticEaseIn
.elasticEaseOut
.elasticEaseInOut
.backEaseIn
.backEaseOut
.backEaseInOut
.bounceEaseIn
.bounceEaseOut
.bounceEaseInOut
.caEaseIn
.caEaseOut
.caEaseInEaseOut
.cubicBezier(0.11, 0.87, 0.21, -0.88)

演示应用

在仓库中,您会找到一个交互式演示 iOS 应用,用于体验不同的缓动效果并发现最适合您需求的缓动效果。

集成

使用 Swift Package Manager 并将依赖项添加到 Package.swift 文件。

  dependencies: [
    .package(url: "https://github.com/psharanda/Easing.git", .upToNextMajor(from: "3.0.0"))
  ]

或者,在 Xcode 中选择 File > Add Package Dependencies… 并添加 Easing 仓库 URL

https://github.com/psharanda/Easing.git

参考

主要的缓动函数集是 https://github.com/warrenm/AHEasinghttps://github.com/ai/easings.net 的 Swift 端口

CubicBezierInterpolator 是 Mozilla 的 nsSMILKeySpline 代码的 Swift 端口 https://github.com/mozilla-services/services-central-legacy/blob/master/content/smil/nsSMILKeySpline.cpp

贡献

欢迎贡献! 如果您发现错误、有功能请求或想贡献代码,请打开 issue 或提交 pull request。

许可证

Easing 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。