0

私は多くのことを試して検索しましたが、解決策が見つかりません。

この写真を .png として持っています [1]: http://imm.io/1f3DY

ユーザーがエリア 1 の fe をタッチした場合

このエリアをフェブルーで塗りつぶしたい。

コードでこれらの領域を見つけて作成し、色で塗りつぶす方法はありますか?

.png を .svg に変換し、いくつかのベジェパスを作成しました。bezierpathes を配列に保存し、ジェスチャー認識機能を追加しました。これはうまくいきます。私が触れた正しい道を手に入れました。パスの色を変更できます。ただし黒い線のみ。fe path1 と path 2 の間のスペースを埋めたいのですが、どうすればよいですか?

       //The event handling method
- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer {
    CGPoint location = [recognizer locationInView:[recognizer.view superview]];

    location.y = self.view.bounds.size.height - location.y;
    for(int i = 0; i< bezierPathes.count; i++)
    {
          //if([b containsPoint:location])

        UIBezierPath* b = bezierPathes[i];
        if([[self tapTargetForPath:b] containsPoint:location])
        {
            [[UIColor redColor] setFill];
            [b fill];
            [testView setNeedsDisplay];

        }

    }
}

// this method will let you easily select a bezier path ( 15 px up and down of a path drawing)
- (UIBezierPath *)tapTargetForPath:(UIBezierPath *)path
{
    if (path == nil) {
        return nil;
    }

    CGPathRef tapTargetPath = CGPathCreateCopyByStrokingPath(path.CGPath, NULL, fmaxf(35.0f, path.lineWidth), path.lineCapStyle, path.lineJoinStyle, path.miterLimit);
    if (tapTargetPath == NULL) {
        return nil;
    }

    UIBezierPath *tapTarget = [UIBezierPath bezierPathWithCGPath:tapTargetPath];
    CGPathRelease(tapTargetPath);
    return tapTarget;
}
4

1 に答える 1

1

これは、Flood Fill アルゴリズムでも実行できます。

リンクはhttp://en.wikipedia.org/wiki/Flood_fillです。

于 2013-09-11T10:58:55.587 に答える