ここには非常に多くの投稿があります。人々は CGContext でブラシを使用して線を描く方法を尋ねました。答えは常に次のとおりです。パターンを使用します。ただし、これを数時間試してみましたが、主な問題は次のように思われます.CoreGraphicsはパターンを塗りつぶしとして描画し、指定したパスのストロークでこのパターンをクリップするだけです. これにより、見栄えの悪いタイル境界が発生し、誰かが実際に手で何かを描いているようには見えません。私が欲しいのは、ブラシがクリッピングなしでパスに沿ってペイントされたものです。私は基本的にパスに沿って移動し、ブラシのサイズでパス上のxポイントごとにブラシイメージを描画するだけです。これは CoreGraphics で何とか可能ですか、それとも自分で実装しなければならないものですか?
//編集: 申し訳ありませんが、パターンを使用したと言って試したことは明らかだと思いました。これは私がこれまで行ったことです:
struct CGPatternCallbacks patternCallback = {0, drawChalkPattern, NULL};
CGAffineTransform patternTransform = CGAffineTransformMakeScale(.25f, .25f);
UIImage* brush = [UIImage imageNamed:@"ChalkBrush"];
CGPatternRef pattern = CGPatternCreate(NULL, (CGRect){CGPointZero, brush.size}, patternTransform, brush.size.width, brush.size.height, kCGPatternTilingConstantSpacingMinimalDistortion, true, &patternCallback);
CGColorSpaceRef patternSpace = CGColorSpaceCreatePattern(NULL);
CGContextSetStrokeColorSpace(context, patternSpace);
CGFloat color[4] = {1.0f, 1.0f, 1.0f, 1.0f};
CGContextSetStrokePattern(context, pattern, color);
CGContextDrawPath(context, kCGPathStroke);
そして、これは patternCallback 関数です:
void drawChalkPattern(void * info, CGContextRef context) {
UIImage* pattern = [UIImage imageNamed:@"ChalkBrush"];
CGContextDrawImage(context, (CGRect){CGPointZero, pattern.size}, [pattern CGImage]);
}
敬具、マイケル