ios - 如何在 uibezierpath 周围获得缓冲区

标签 ios nsbezierpath uibezierpath bounding

我有一些 uibezier 路径。作为路径,它们实际上没有厚度。 但是,我希望找到一种方法来定义路径周围的区域,就像这张图片中线条周围的灰色区域一样 enter image description here

基本上,我想测试绘制的线条是否落在线条周围的缓冲区内。 我以为这会很简单,但事实证明它比我想象的要复杂得多。我可以使用 CGPathApply 函数来检查我路径上的点,然后得到一个范围 + 或 - 每个点,但它比角度和曲线更复杂。有什么想法吗?

最佳答案

扩展路径的宽度实际上是相当困难的。然而,你可以用更粗的宽度来抚摸它,并获得几乎相同的效果。像...

CGContextSetRGBStrokeColor(context, 0.4, 0.4, 0.4, 1.0);
[path setLineWidth:15];
[path stroke];
CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 1.0);
[path setLineWidth:3];
[path stroke];

...会生成一张与您问题中的图片类似的图片。但我怀疑这对您来说不是新闻。

真正的技巧是测试“绘制的线是否落在缓冲区内”。这个问题与我刚刚在 another question 中为自己回答的问题非常相似。 .看看 LineSample.zip我在那里分享的代码。这实现了位图/按位数据比较,以检测您需要的行上的命中。您可以将较粗的“缓冲区”路径绘制到位图中进行测试,并在您的 View 中显示较细的线。

关于ios - 如何在 uibezierpath 周围获得缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6520154/

相关文章:

ios - 如何更改状态栏的框架?

objective-c - cocoa :两点之间的 "Random"线?

ios - 基于CGPoint在屏幕上绘制UIView

ios - Swift - 如何在 CAShapeLayer 或 UIBezierPath(ovalInRect : ovalRect)

swift - 如何确保 CAShapeLayer 调整大小以适应 UIView

ios - 4 个选项卡的选项卡栏 Controller 中的相同 View Controller 给出了错误的选定 tabcontroller 选定索引

ios - UIWebview缓存到磁盘

objective-c - 贝塞尔路径带圆角矩形 : -- odd rendering artefact

ios - 缩放 ScrollView 内的内容 View 不起作用