平铺CGPattern时正确绘制

时间:2013-03-12 14:55:55

标签: ios core-graphics quartz-core

我正在尝试使用CGPattern填充矩形,用条纹绘制典型的条形图。我得到了这个。

enter image description here

模式的代码(不是整个条形码)是这个

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),图形回调在单元格rect中绘制5条重新定向的斜线。它看起来不错,但如果你放大一点......

enter image description here

这些线被剪裁到单元格rect,所以它看起来像那样。我有两个问题:

  1. 为什么没有在原点(0,0)中绘制图案 我在CGPatternCreate中指定的栏?可能是缺席 变换在第三个参数?
  2. 如何避免这种令人讨厌的效果?

1 个答案:

答案 0 :(得分:0)

好吧,解决了:P

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