我正在尝试使用UIBezierPath创建一个矩形.我采用了两种不同的方法来绘制它.另外,我将笔画宽度增加到25像素.
第一种方法:使用closePath
UIBezierPath *bpath = [UIBezierPath bezierPath]; [bpath moveToPoint:CGPointMake(x,y)]; [bpath addLineToPoint:CGPointMake(x + w,y + h)]; [bpath addLineToPoint:CGPointMake(x,y + h)]; [bpath closePath];
输出:
UIBezierPath *bpath = [UIBezierPath bezierPath]; [bpath moveToPoint:CGPointMake(x,y)];
输出:
在closePath的文档中,它说这个方法通过在子路径中的第一个和最后一个点之间创建一个线段来关闭当前子路径.此方法随后将当前点更新为新创建的线段的末尾,这也是现在关闭的子路径中的第一个点.
解决方法
区别在于[closePath]方法实际上向支持UIBezierPath的底层CGPath添加了一个额外的路径元素.
如果使用[closePath],则会将另一个类型为kCGPathElementCloseSubpath的CGPathElement追加到该最后一个线段之后的路径末尾.
当从文档中使用UIBezierPath的[containsPoint:]方法时,这一点尤为重要:
A point is not considered to be enclosed by the path if it is inside an open subpath,regardless of whether that area would be painted during a fill operation. Therefore,to determine mouse hits on open paths,you must create a copy of the path object and explicitly close any subpaths (using the closePath method) before calling this method.