0

パスを描画し、ジェスチャレコグナイザーを介してビューをドラッグ可能にすることができます。ドラッグ可能なパス上でポイントを作成するにはどうすればよいですか。ビュー内の位置を確認し、ドラッグされた位置に位置をリセットするには、その点を特定する必要があると思いますが、それが方法がわかりません。

4

1 に答える 1

1

CGPathまたはのヒットを検出する機能がありますUIBezierPath。ON touchesBegan:メソッド次のいずれかの方法を使用して、ヒットポイントがパス上にあるかどうかを検出できます。

の場合UIBezierPath- (BOOL)containsPoint:(CGPoint)point

の場合GGPath

 bool CGContextPathContainsPoint (
   CGContextRef context,
   CGPoint point,
   CGPathDrawingMode mode
);

次に、このポイントがパス上にある場合は、フラグを設定できます。メソッドでtouchesEndは、変換されたポイントを取得できます。ただし、パスを再描画する必要があります。パスは弾力性がありません。

編集:あなたのケースでの私の仕事の1つは、CAShapeLayer.CAShapeLayerがUIBazierPathまたはを描画できることCGPathRefです。また、strokeendとstrokestartのプロパティを介してアニメート可能です。次のコードを参照して、次のコードを使用してパスを描画する方法を理解してください。CAShapeLayer

    UIBezierPath *path = [UIBezierPath bezierPath];
    // Draw your path acording to your requirements
    // Remember that you don't need to stroke path in this implementation
    CAShapeLayer *shapeLayer = [CAShapeLayer layer];
    shapeLayer.path = path.CGPath; // path is a UIBezierPath object
    shapeLayer.strokeColor = [UIColor redColor].CGColor;
    shapeLayer.fillColor = [UIColor clearColor].CGColor;
    shapeLayer.lineWidth = 1.5;
    shapeLayer.strokeStart = 0.0;
    shapeLayer.strokeEnd = 1.0;
    [shapeLayer renderInContext:ctx]; // you can also use addSubLayer: and drawInContext
于 2012-12-05T14:37:41.767 に答える