2

UIBezierpath を使用して描画された線でタッチ ポイントを見つけることができません。CGPathContainPoint が行に対して機能していません。私を助けてください

4

1 に答える 1

7

パスが実際に画面上でどのように見えるかを表す別のパス オブジェクトを作成し、タッチ ポイントがそのパス内にあるかどうかを確認できます。CGPath リファレンスには、便利なコンストラクター関数がありますCGPathCreateCopyByStrokingPath。次のように使用します。

CGPathRef originalPath = myBezierPath.CGPath;  //The single-line path

//Use the values you use to draw the path onscreen, 
//or use a width representing how far the user can touch
//for it to be recognized by the path.
//For example, for an error tolerance of 4px, use a width of 8px.
CGPathRef strokedPath = CGPathCreateCopyByStrokingPath(originalPath, NULL, lineWidth, lineCap, lineJoin, miterLimit);
BOOL pathContainsPoint = CGPathContainsPoint(strokedPath, NULL, touchPoint, NO);

上記のように、これにより、ユーザーが線ではなくタッチする領域を指定できるという利点が得られます。

お役に立てれば!

于 2013-08-07T05:08:51.000 に答える