贝塞尔曲线在ios开发中运用的非常广泛,例如在绘画,路径的设置等非常的方便,有的时候我们如果能够得到上面的点的坐标,我们能做的事情就更多了我们可以通过下面的方法得到贝塞尔曲线上的所有的点:
#define VALUE(_INDEX_) [NSValue valueWithCGPoint:points[_INDEX_]]
@implementation UIBezierPath (Points)
void getPointsFromBezier(void *info,const CGPathElement *element){
NSMutableArray *bezierPoints = (__bridge NSMutableArray *)info;
CGPathElementType type = element->type;
CGPoint *points = element->points;
if (type != kCGPathElementCloseSubpath) {
[bezierPoints addObject:VALUE(0)];
if ((type != kCGPathElementAddLineToPoint) && (type != kCGPathElementMoveToPoint)) {
[bezierPoints addObject:VALUE(1)];
}
}
if (type == kCGPathElementAddCurveToPoint) {
[bezierPoints addObject:VALUE(2)];
}
}
- (NSArray *)points
{
NSMutableArray *points = [NSMutableArray array];
CGPathApply(self.CGPath, (__bridge void *)points, getPointsFromBezier);
return points;
}我们可以看出来得到所有点的重要方法就是CGPathApply这个方法,官方文档是这样写的:
有三个参数分别是贝塞尔曲线的path、贝塞尔曲线的info、还有就是自定义方法的函数指针,通过函数指针将points中所有的点都处理完成。
本文介绍了在iOS开发中如何获取贝塞尔曲线上的所有点坐标,重点讲解了利用CGPathApply方法来实现这一过程。该方法通过传递贝塞尔曲线的path、info及自定义处理函数,遍历并处理所有点,从而为应用程序提供了更多的可能性。
549

被折叠的 条评论
为什么被折叠?



