2017-05-02 1 views
0

私は、描画アプリに基本的な圧力感度を追加しようとしています。私はストロークを描画しようとすると、不透明度は圧力に依存するところ、問題に実行しています - 線分の重なりのポイントは、暗いスポットを作成する、2つの行をブレンド:オーバーラップをブレンドせずに背景とブレンドして、異なる不透明度の線の並びを描く方法は?

enter image description here

この私のコードは次のとおりです。

CGContextSetLineCap(context, kCGLineCapRound); 
CGContextSetLineWidth(context, path.thickness); 
CGContextSetStrokeColorWithColor(context, self.lineColor.CGColor); 

for (Segment *segment in segments) { 
    CGContextMoveToPoint(context, segment.start.x, segment.start.y); 
    CGContextAddLineToPoint(context, segment.end.x, segment.end.y); 
    CGContextSetAlpha(context, segment.alpha); 
    CGContextStrokePath(context); 
} 

私はラインキャップを満たし、まだ背景の上に透明性を持つことができるの円を避けたいです。

私はコンテキストブレンドモードを試しましたが、何も完全に満足できるものはありません - kCGBlendModeDestinationAtopは滑らかなラインを与えましたが、ラインの最後にアーティファクトがあり、バックグラウンドとのブレンドを失います。

バンディングは問題ではありません。

答えて

0

誰かが同じ問題を抱えている場合は、私が解決した方法は、CGLayer(コアグラフィックスレイヤー - コアグラフィックスレイヤーではなくコアグラフィックス透明レイヤー)に線分を描画することでした。 CGLayerコンテキストのブレンドモードをDestinationAtopに設定し、通常のブレンドを使用して実際のCGContextでCGLayerをレンダリングしました。 チャームのように働いた。

関連する問題