objective-c – 在点之间添加曲线的CGPath
发布时间:2020-12-16 07:04:48 所属栏目:百科 来源:网络整理
导读:所以我有一个随机生成一些CGPoints的函数,然后我从这些点创建一个CGPath.我在关键帧动画中使用此路径来为屏幕周围的视图设置动画. 使用以下代码生成路径: - (CGMutablePathRef)generatePathFromCoordinates:(NSArray *)coordinates{ CGMutablePathRef path
所以我有一个随机生成一些CGPoints的函数,然后我从这些点创建一个CGPath.我在关键帧动画中使用此路径来为屏幕周围的视图设置动画.
使用以下代码生成路径: - (CGMutablePathRef)generatePathFromCoordinates:(NSArray *)coordinates { CGMutablePathRef path = CGPathCreateMutable(); CGPoint point = [(NSValue *)[coordinates objectAtIndex:0] CGPointValue]; CGPathMoveToPoint(path,nil,point.x,point.y); for (int i=1; i < coordinates.count; i++) { point = [(NSValue *)[coordinates objectAtIndex:i] CGPointValue]; CGPathAddLineToPoint(path,point.y); } return path; } 上面的代码工作得很好,但动画看起来有点奇怪,所以我想在坐标之间添加曲线而不是直线.如下图所示(我知道的惊人的绘画技巧!).路径’A’是我正在做的事情,路径’B’是我的目标: 在查看了CGPath引用中可用的函数之后,我可以看到一些可能完成工作的CGPathAddArcToPoint CGPathAddCurveToPoint.我有一个简短的使用这些功能,但无法获得所需的效果(可能是因为我使用不正确) 你们能指出我正确的方向来获得一个漂亮的曲线吗? 提前致谢 解决方法
CGPathAddCurveToPoint将一条三次曲线添加到贝塞尔曲线路径.在您不知道的情况下,它的制作方式是曲线的形状由两个控制点确定(使用曲线的三级方程).如果希望曲线具有特定形状,则需要计算两个中间点,偏向于路径当前点的值和曲线终点.相反,如果你不关心具有特定形状的曲线,你可以选择一些随机点.这是一个实现示例:
for (int i=1; i < coordinates.count; i++) { point = [[coordinates objectAtIndex:i] CGPointValue]; CGPathAddCurveToPoint(path,randomX(),randomY(),point.y); } 我看到你使用了CGPath,但如果你觉得它更容易使用,你也可以使用OOP和UIBezierPath而不是CGPath. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |