8

SVGファイルをに解析していますUIBezierPathCGPointaがの内側にあるのか外側にあるのか知りたいのですが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/

私はこれを私のアプリの1つで使用しましたが、問題なく動作します。彼の例は私が物事を機能させるために必要なすべてでした。さらにサポートが必要な場合は、今夜コードの一部を投稿できます。

SVGの解析についてサポートが必要な場合は、githubプロジェクトをフォークしてSVGパスの解析を行い、ライン要素とポリライン要素をサポートするように拡張しました。SVGをUIBezierPathsに変換してから、アニメーションを実行し、指で描画するためのヒットテストを行っています。

https://github.com/stevekohls/PocketSVG

于 2012-10-05T14:48:24.907 に答える
0

クラッシュはフレームワークのバグであることが判明しました。この回答は、ポイントが内にあるかどうかを判断する別の方法を提供しますUIBezierPath

于 2012-10-22T06:53:39.353 に答える