3

以下の画像の青い部分を消したいです。図面の反転をクリップするにはどうすればよいですか? (それが正しい質問の仕方だと思います)

三角形のコード例: (より良い三角形のコードがあれば、それも受け入れます!;)

    int lineWidth = 4;

    int w = size.size.width;
    int h = size.size.height - lineWidth;

    CGPoint top = CGPointMake(0+(w/2)+.5, 0);

    CGContextClipToRect(ctx, CGRectMake(0, 0, w, h));
    CGContextStrokePath(ctx);

    CGContextMoveToPoint(ctx, top.x, top.y);
    CGContextAddLineToPoint(ctx, top.x + (w/2), top.y + h  );
    CGContextAddLineToPoint(ctx, top.x - (w/2), top.y + h   );
    CGContextAddLineToPoint(ctx, top.x, top.y);

    CGContextFillPath(ctx);

    CGContextSetLineWidth(ctx, lineWidth);
    CGContextSetLineCap(ctx, kCGLineCapRound);
    CGContextMoveToPoint(ctx, top.x, top.y);
    CGContextAddLineToPoint(ctx, top.x + (w/2), top.y + h  );
    CGContextAddLineToPoint(ctx, top.x - (w/2), top.y + h   );
    CGContextAddLineToPoint(ctx, top.x, top.y);

    CGContextStrokePath(ctx);

ここに画像の説明を入力

4

2 に答える 2

0

パスの逆をクリップするには、クリップに囲んでいる四角形を追加するだけです。

この場合、私があなたを正しく理解すれば、あなたは形の赤いストロークの周りをクリップしたいと思うでしょう。一般に、ストロークパスの線幅のため、クォーツではこれは簡単な作業ではありません。もちろん、これら2つの形状について、赤いストロークの輪郭を計算し、その周りをクリップすることができます。ただし、一般的な解決策には、線幅を含む包含パスを計算する方法が必要です。

ビットマップマスクを含める方法は他にもありますが、最善の解決策は、正確に何を描画しているかによって異なります。特殊なクォーツブレンドモードを使用して非常にエレガントかつ効率的に解決できる同様の問題がありました。これは、描画する前のcentextの内容と、結果をUIの他の部分とどのようにブレンドするかによって大きく異なります。

于 2012-11-26T14:33:03.487 に答える