计算UIBezierPath 路径内、路径上的点
2016-01-05 21:37
369 查看
背景:使用UIBezierPath 和 CAShapeLayer 画封闭图形
1.获得路径上的所有点
NSMutableArray *bezierPoints = [NSMutableArray array];
CGPathApply(path.CGPath, (__bridge void *)(bezierPoints), MyCGPathApplierFunc);
UIBezierPath *tessss = [[UIBezierPath alloc]init];
for (int i = 0 ;i<bezierPoints.count;i++) {
NSValue *pointValue = bezierPoints[i];
CGPoint point = [pointValue CGPointValue];
if (i==0) {
[tessss moveToPoint:point];
}else{
[tessss addLineToPoint:point];
}
XLogPoint1(point);
}
[tessss closePath];
self.penShapeView.shapeLayer.path = tessss.CGPath ;
*/
/*
void MyCGPathApplierFunc (void *info, const CGPathElement *element) {
NSMutableArray *bezierPoints = (__bridge NSMutableArray *)info;
CGPoint *points = element->points;
CGPathElementType type = element->type;
switch(type) {
case kCGPathElementMoveToPoint: // contains 1 point
[bezierPoints addObject:[NSValue valueWithCGPoint:points[0]]];
break;
case kCGPathElementAddLineToPoint: // contains 1 point
[bezierPoints addObject:[NSValue valueWithCGPoint:points[0]]];
break;
case kCGPathElementAddQuadCurveToPoint: // contains 2 points
[bezierPoints addObject:[NSValue valueWithCGPoint:points[0]]];
[bezierPoints addObject:[NSValue valueWithCGPoint:points[1]]];
break;
case kCGPathElementAddCurveToPoint: // contains 3 points
[bezierPoints addObject:[NSValue valueWithCGPoint:points[0]]];
[bezierPoints addObject:[NSValue valueWithCGPoint:points[1]]];
[bezierPoints addObject:[NSValue valueWithCGPoint:points[2]]];
break;
case kCGPathElementCloseSubpath: // contains no point
break;
}
}
2.计算封闭路径内像素点个数(面积)
int count = 0 ;
CGRect frame = self.lastPenBezierPath.bounds ;
for (int i = frame.origin.x ; i < frame.origin.x + frame.size.width; i++) {
for (int j = frame.origin.y ; j < frame.origin.y + frame.size.height; j++) {
CGPoint point = CGPointMake(i,j);
if ([self.lastPenBezierPath containsPoint:point]) {
count ++ ;
}
}
}
NSLog(@"count = %d",count);
1.获得路径上的所有点
NSMutableArray *bezierPoints = [NSMutableArray array];
CGPathApply(path.CGPath, (__bridge void *)(bezierPoints), MyCGPathApplierFunc);
UIBezierPath *tessss = [[UIBezierPath alloc]init];
for (int i = 0 ;i<bezierPoints.count;i++) {
NSValue *pointValue = bezierPoints[i];
CGPoint point = [pointValue CGPointValue];
if (i==0) {
[tessss moveToPoint:point];
}else{
[tessss addLineToPoint:point];
}
XLogPoint1(point);
}
[tessss closePath];
self.penShapeView.shapeLayer.path = tessss.CGPath ;
*/
/*
void MyCGPathApplierFunc (void *info, const CGPathElement *element) {
NSMutableArray *bezierPoints = (__bridge NSMutableArray *)info;
CGPoint *points = element->points;
CGPathElementType type = element->type;
switch(type) {
case kCGPathElementMoveToPoint: // contains 1 point
[bezierPoints addObject:[NSValue valueWithCGPoint:points[0]]];
break;
case kCGPathElementAddLineToPoint: // contains 1 point
[bezierPoints addObject:[NSValue valueWithCGPoint:points[0]]];
break;
case kCGPathElementAddQuadCurveToPoint: // contains 2 points
[bezierPoints addObject:[NSValue valueWithCGPoint:points[0]]];
[bezierPoints addObject:[NSValue valueWithCGPoint:points[1]]];
break;
case kCGPathElementAddCurveToPoint: // contains 3 points
[bezierPoints addObject:[NSValue valueWithCGPoint:points[0]]];
[bezierPoints addObject:[NSValue valueWithCGPoint:points[1]]];
[bezierPoints addObject:[NSValue valueWithCGPoint:points[2]]];
break;
case kCGPathElementCloseSubpath: // contains no point
break;
}
}
2.计算封闭路径内像素点个数(面积)
int count = 0 ;
CGRect frame = self.lastPenBezierPath.bounds ;
for (int i = frame.origin.x ; i < frame.origin.x + frame.size.width; i++) {
for (int j = frame.origin.y ; j < frame.origin.y + frame.size.height; j++) {
CGPoint point = CGPointMake(i,j);
if ([self.lastPenBezierPath containsPoint:point]) {
count ++ ;
}
}
}
NSLog(@"count = %d",count);
相关文章推荐
- Easy-Ui错误之SyntaxError: function statement requires a name解决办法
- Jdbc Url 设置allowMultiQueries为true和false时底层处理机制研究
- Java 快速排序 (Quick Sort)
- 自定义对话框,进度条,下拉刷新等
- 邻接矩阵的dijkstra算法 迭代法以及使用PriorityQueue的java实现
- listview 管理示例
- iOS UI学习笔记(三)UIlable
- EasyUi之dialog对话框
- 程序段计时操作,并将运行时间输出TXT文档
- key/value数据库
- 自定义UICollectionViewLayout—实现瀑布流效果
- day2-UI布局
- UIImage与UIbutton相关
- UI期的基础类 UIView 基本运行顺序
- LiberOffice install office productivity suite -- Chinese_simpl
- 蓝懿IOS学习UIScrollView/UIPageControl
- Builder模式(建造者模式)
- jQquery选取元素
- CodeForces 441A Valera and Antique Items
- IOS模态视图 (UI页面切换)