CGPoint
、CGSize
、CGTransform
、UIColor
和 UIBezierPath
.cubicBezier(...)
).caEaseIn
, .caEaseOut
, .caEaseInEaseOut
)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)
在仓库中,您会找到一个交互式演示 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/AHEasing 和 https://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 文件。