私が書いている視覚化アプリでは、パスで作成されたマットを使用してグラフィックを形作りたいと考えています。グラフィックは、さまざまな形状が描かれた水平の長方形のストリップです。この長方形のストリップの上に、長方形のストリップを形成するマットとして機能する楕円を描画して、楕円内に描画されているように見せたいと思います。どうすればいいですか?
この単純化された例では、さまざまなブレンド モードを使用してその上に楕円を描画することで、背景の青い四角形を青い楕円として表示しようとしていますが、失敗しています。
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
[[colorDictionary objectForKey:@"blueSolid"] setFill];
CGContextFillRect(context, self.bounds);
//CGContextSetBlendMode(context, kCGBlendModeNormal);
CGContextSetBlendMode(context, kCGBlendModeDestinationIn);
CGContextFillEllipseInRect(context, self.bounds);
}
ありがとう、ダグ
更新: 解決策 簡単に言うと: クリッピング パス。ドゥー!次のコード スニペットは、私が求めている効果を作成します。これは、赤い背景に対する青い楕円です。青い楕円は、青い四角形を楕円の形状に拘束することによって作成されることに注意してください。これが必要です。涼しい。
これが他の誰かに役立つことを願っています。クリッピング パスは非常に強力です。乾杯。
CGContextRef context = UIGraphicsGetCurrentContext();
[[colorDictionary objectForKey:@"redSolid"] setFill];
CGContextFillRect(context, self.bounds);
CGContextBeginPath(context);
CGContextAddEllipseInRect(context, CGRectInset(self.bounds, 32, 32));
CGContextClip(context);
[[colorDictionary objectForKey:@"blueSolid"] setFill];
CGContextFillRect(context, self.bounds);