CubicBezier提供类似于CSS的cubic-bezier
过渡时间函数的三次贝塞尔(cubic-bezier)渐变。它由npm模块bezier-easing转换而来,并基于这篇文章实现。
let cubicBezier = CubicBezier(mX1: 0, mY1: 0, mX2: 1, mY2: 0.5)
cubicBezier.easing(0.0) // 0
cubicBezier.easing(0.5) // 0.3125
cubicBezier.easing(1.0) // 1
或
let cubicBezier = CubicBezier(controlPoints: (0.25, 0.1, 0.25, 0.1))
或
let cubicBezier = CubicBezier(easing: CubicBezier.Easing.ease)
枚举 | 原始值 |
---|---|
CubicBezier.Easing.ease | (0.25, 0.1, 0.25, 0.1) |
CubicBezier.Easing.easeIn | (0.42, 0.0, 1.0, 1.0) |
CubicBezier.Easing.easeOut | (0.0, 0.0, 0.58, 1.0) |
CubicBezier.Easing.easeInOut | (0.42, 0.0, 0.58, 1.0) |
CubicBezier.Easing.linear | (0, 0, 1, 1) |
您还可以从CubicBezier
实例或CubicBezier.easing
中获取当前控制点。
CubicBezier.Easing.ease.toControlPoints() // (0.25, 0.1, 0.25, 0.1)
let cubicBezier = CubicBezier(controlPoints: (0.25, 0.1, 0.25, 0.1))
cubicBezier.controlPoints // // (0.25, 0.1, 0.25, 0.1)
CAMediaTimingFunction无法提供计算时间(t)的值的任何方法。
这里是CubicBezier想要解决的问题,目的是计算用于构建定制动画的B(t)值。
let cubicBezier = CubicBezier(mX1: 0, mY1: 0, mX2: 1, mY2: 0.5)
let duraing: Int = 3 // Seconds
var countingNumber: Int = 0
for time in duraing {
countingNumber = countingNumber + cubicBezier(time / duraing)
print("Count: \(countingNumber), At time: \(time)")
}
CHCubicBezier支持2.0.0以上版本的Swift Packge Manager。
import PackageDescription
let package = Package(
name: "MyProject",
dependencies: [
.Package(url: "https://github.com/CapsLock-Studio/CHCubicBezier", majorVersion: 2)
]
)
根据Apple的文档,您需要在Objective-C代码中更新导入语句(将它们更新到#import "ProductModuleName-Swift.h"
)。
#import "CHCubicBezier-Swift.h"
// or
@import "CHCubicBezier.h"
完毕!开始使用CHCubicBezier吧!
版权© Calvin Huang。本软件使用MIT许可协议。