ios - 带曲线路径的滑块
解决方案
基本思想是,您可以为该曲线定义一个二次贝塞尔曲线,例如,使用一点效用函数point(at:)
来告诉您 0 到 1 之间的值,该点在该贝塞尔曲线上的位置:
struct QuadBezier {
var point1: CGPoint
var point2: CGPoint
var controlPoint: CGPoint
var path: UIBezierPath {
let path = UIBezierPath()
path.move(to: point1)
path.addQuadCurve(to: point2, controlPoint: controlPoint)
return path
}
func point(at t: CGFloat) -> CGPoint {
let t1 = 1 - t
return CGPoint(
x: t1 * t1 * point1.x + 2 * t * t1 * controlPoint.x + t * t * point2.x,
y: t1 * t1 * point1.y + 2 * t * t1 * controlPoint.y + t * t * point2.y
)
}
}
然后您可以使用它来定义弯曲路径:
let bounds = view.bounds
let point1 = CGPoint(x: bounds.minX, y: bounds.midY)
let point2 = CGPoint(x: bounds.maxX, y: bounds.midY)
let controlPoint = CGPoint(x: bounds.midX, y: bounds.midY + 100)
let bezier = QuadBezier(point1: point1, point2: point2, controlPoint: controlPoint)
然后你可以相应地设置center
你的圆形视图:
circleView.center = bezier.point(at: t)
例如,这里我使用path
了计算属性来渲染蓝色CAShapeLayer
,并使用基于一个值point(at:)
来设置红色圆形视图:center
t
显然,我正在使用手势来擦除 的更改t
,但您可以使用自定义步进器或其他任何东西来完成相同的事情。
推荐阅读
- javascript - 我们如何将颜色作为道具传递?
- python - 如何在 tf.Tensor 中找到最大值?
- javascript - 两种创建命名空间方式的区别
- database - 导出本地数据库和导入服务器数据库时 WordPress 菜单丢失
- php - 在 MySQL PHP 中从多行结果中分离行
- javascript - 在我的 chrome 扩展中将框架加载到我的选项页面中
- postgresql - 重写 pl/pgSQL 函数
- r - 使用样本创建多个训练、验证、测试拆分
- android - 将带有过滤器的 SVG 转换为 Android Vector Drawable
- angular - mat-autocomplete 不使用 observable 过滤