8

我正在将 SVG 文件解析为UIBezierPath. 我想知道 aCGPoint是在内部还是外部UIBezierPath。为此,我使用containsPoint:. 当我在模拟器中运行它时,一切正常(几乎!)。当我在 iPad 设备上运行它时,它会在某些路径和点上崩溃。在我打电话之前,我会打电话closePath给每个人。UIBezierPathcontainsPoint:

以下是一些导致崩溃的路径和点(我将点随机化,因此可能会有更多崩溃点):

Crash Points: (659.0, 444.0), (659.0, 443.0)
SVG Path: M661 446 c1 -1 3 -1 4 -1 1 -1 2 -2 2 -4 0 -2 0 -2 -2 -2 0 1 -2 1 -3 1 -2 0 -3 1 -3 2 0 1 0 2 0 3 0 0 1 1 2 1z

Crash Points: (533.0, 458.0), (533.0, 457.0)
SVG Path: M535 460 c0 0 1 -1 1 -2 1 -2 0 -3 -1 -3 0 0 -1 0 -2 1 0 1 0 2 0 3 1 0 1 1 2 1z

我无法弄清楚它为什么会崩溃。对我来说,它应该返回YES,或者NO无论它得到什么路径或点。

为什么会崩溃?:-(

4

2 回答 2

2

尝试这篇文章中的命中测试技术:

http://oleb.net/blog/2012/02/cgpath-hit-testing/

我已经在我的一个应用程序中使用了它,它可以正常工作。他的例子是我让事情顺利进行所需的全部。如果您需要更多帮助,我可以在今晚发布我的一些代码。

如果您在 SVG 解析方面需要任何帮助,我分叉了一个 github 项目来解析 SVG 路径,并将其扩展为支持线和折线元素。我正在将 SVG 转换为 UIBezierPaths,然后对手指绘图进行动画和点击测试。

https://github.com/stevekohls/PocketSVG

于 2012-10-05T14:48:24.907 回答
0

事实证明,崩溃是框架中的一个错误。这个答案提供了另一种方法来确定一个点是否在 a 内UIBezierPath

于 2012-10-22T06:53:39.353 回答