1

典型的なバーをストライプでペイントして、長方形をCGPatternで埋めようとしています。これを入手します。

ここに画像の説明を入力してください

パターンのコード(バー全体ではない)はこれです

CGContextSaveGState (context);

CGColorSpaceRef patternSpace = CGColorSpaceCreatePattern(NULL);
CGContextSetFillColorSpace(context, patternSpace);
CGColorSpaceRelease(patternSpace);
CGFloat alpha = 0.25f;
static const CGPatternCallbacks callbacks = {0, &DrawStripesPattern, NULL};
NSNumber *cellSide = [NSNumber numberWithFloat:kTAGBarHeight];
CGFloat cellSideFloat = [cellSide floatValue];

CGPatternRef pattern = CGPatternCreate((__bridge void *)(cellSide),
                                       CGRectMake(0.0f, 0.0f, cellSideFloat, cellSideFloat),
                                       CGAffineTransformIdentity,
                                       cellSideFloat,
                                       cellSideFloat,
                                       kCGPatternTilingConstantSpacing,
                                       true,
                                       &callbacks);
CGContextAddPath(context, [path CGPath]);
CGContextClip(context);
CGContextSetFillPattern(context, pattern, &alpha);
CGContextFillRect(context, barRect);
CGPatternRelease(pattern);

CGContextRestoreGState (context);

パターンセルはバーの高さと同じ側にあり(を見てくださいkTAGBarHeight)、描画コールバックはセルの長方形の内側に5本の斜めの線を描画しています。見た目は良さそうですが、少しズームすると...

ここに画像の説明を入力してください

線はセルの長方形にクリップされているので、そのように見えます。2つの質問があります:

  1. で指定したように、バーの長方形の原点(0,0)にパターンが描画されないのはなぜCGPatternCreateですか?3番目のパラメーターに変換がない可能性がありますか?
  2. どうすればその迷惑な影響を回避できますか?
4

1 に答える 1

0

まあ、解決しました:P

描画コールバックでは、5本の線を描画する代わりに、7本を描画します。最初は点(0.0f、0.0f)で、7番目は点(maxX、maxY)です。それは正しく線を結びます。

于 2013-03-12T15:04:46.987 に答える