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 条规则斜线。它看起来不错,但如果你放大一点......

在此处输入图像描述

线条被剪裁到单元格矩形,所以看起来像这样。我有两个问题:

  1. 为什么模式没有按照我在中指定的条形矩形的原点 (0,0) 绘制CGPatternCreate?会不会是第三个参数没有变换?
  2. 我怎样才能避免这种恼人的影响?
4

1 回答 1

0

好吧,解决了:P

在我的绘图回调中,我绘制了 7 条线,而不是 5 条线,第一条在点 (0.0f, 0.0f),第七条在点 (maxX, maxY)。这正确地连接了线条。

于 2013-03-12T15:04:46.987 回答