使用CGContextScaleCTM时避免拉伸描边

时间:2012-08-24 11:43:57

标签: iphone ios cocoa-touch core-graphics

我有一个我正在drawRect中绘制的形状,它存储在CGMutablePathRefshapeMutablePath)中。每次调用drawRect时,都会拉伸形状以适应屏幕周围的笔触边框。我想知道,如何绘制笔划边框而不拉伸它是否可能?即拉伸shapeMutablePath,然后在它周围绘制笔触边框,使其每次绘制时都具有相同的宽度?我已经尝试改变比例的顺序和添加和绘制路径无济于事。

- (void) drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);

    CGContextSetRGBFillColor(context, 1.0000, 1.0000, 1.0000, 1.0000);
    CGContextSetRGBStrokeColor(context,0.0000,0.0000,0.0000,1.0000);
    CGContextSetLineWidth(context, DialogueTextViewLineWidth);

    CGContextScaleCTM (context, self.frame.size.width / self.shapeMutablePathWidth, self.frame.size.height / self.shapeMutablePathHeight);
    CGContextAddPath(context, self.shapeMutablePath);
    CGContextDrawPath(context, kCGPathFillStroke);
    CGContextRestoreGState(context);    
}

1 个答案:

答案 0 :(得分:2)

而不是缩放CTM并使用原始路径:

CGContextScaleCTM (context, self.frame.size.width / self.shapeMutablePathWidth, self.frame.size.height / self.shapeMutablePathHeight);
CGContextAddPath(context, self.shapeMutablePath);

...创建一个转换后的路径并改为使用它:

CGAffineTransform trn = CGAffineTransformMakeScale(self.bounds.size.width / self.shapeMutablePathWidth, self.bounds.size.height / self.shapeMutablePathHeight);
CGPathRef transformedPath = CGPathCreateCopyByTransformingPath(self.shapeMutablePath, &trn);
CGContextAddPath(context, transformedPath);
CGPathRelease(transformedPath);

这将填充并描边相同(缩放)区域,但变换不会影响笔触宽度。

B.t.w。您通常会使用边界而不是框架的大小来计算比例。