drawRect中的图形无法正确显示

时间:2012-07-09 06:45:00

标签: cocoa-touch drawrect

我想在我的应用中实现自由形式绘图。首先,我尝试了drawLayer:inContext:中的代码,它给了我想要的结果。

在CALayer中绘图:

CALayer drawing implementation

但是当我决定在drawRect:中实现代码时,发生了这种情况:

drawing implemented in drawRect: method

即使我在白色空间内绘制,图形也会在外面呈现,如上所示。我使用的代码完全相同。我将其从drawLayer:inContext:复制粘贴到drawRect:。我没有改变一件事,为什么会发生这种情况?

守则:

CGContextSaveGState(ctx);

CGContextSetLineCap(ctx, kCGLineCapRound);
CGContextSetLineWidth(ctx, 1.0);
CGContextSetRGBStrokeColor(ctx, 1, 0, 0, 1);
CGContextBeginPath(ctx);
CGContextMoveToPoint(ctx, prevPoint.x, prevPoint.y);
for (NSValue *r in drawnPoints){
    CGPoint pt = [r CGPointValue];
    CGContextAddLineToPoint(ctx, pt.x, pt.y);
}
CGContextStrokePath(ctx);

CGContextRestoreGState(ctx);

1 个答案:

答案 0 :(得分:0)

我看到你在全屏模式下使用app,其中视图居中并且没有占据整个屏幕宽度。

可能CALayer已应用了变换,将绘图从屏幕左侧转换为中心。 drawRect:可能不是这种情况。尝试设置CGContext的变换矩阵:

CGContextSaveGState(ctx);
CGFloat xOffset = CGRectGetMidX(screenFrame) - CGRectGetMidX(viewFrame);
CGContextTranslateCTM(ctx, xOffset, 0.0f);
// rest of drawing code
// ...
CGContextRestoreGState(ctx);