objective-c - 包含点 : for UIBezierPath crashes

标签 objective-c ios quartz-core

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

下面是一些导致崩溃的路径和点(我把点随机化了,所以崩溃点可能会更多):

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

我不知道为什么会崩溃。对我来说,无论到达什么路径或点,它都应该返回 YESNO

为什么会崩溃? :-(

最佳答案

试试这篇文章中的 HitTest 技术:

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

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

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

https://github.com/stevekohls/PocketSVG

关于objective-c - 包含点 : for UIBezierPath crashes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12489988/

相关文章:

ios - 如何使用 Xamarin 在编译时将内容放入 iOS Documents 文件夹中?

macos - 已删除的未提交 CATransaction 的线程未显示源代码?

ios - 在 iOS7 的 viewWillDisappear 期间不再能够隐藏键盘

ios - 检查当前的 rootViewController 是什么?

ios - 同时显示 UIAlertView 和键盘

iphone - 无法通过平滑的徒手绘图来包含撤消/重做

iOS 绘制弧线未按预期工作

iphone - MPMoviePlayerViewController,删除 quicktime 符号/添加背景图像?

objective-c - 从 xcode 中删除 "Format String is not a string literal"警告

ios - UIImageView 的拉伸(stretch)属性有什么用。我如何使用此属性。?