我想在我的应用中实现自由形式绘图。首先,我尝试了drawLayer:inContext:
中的代码,它给了我想要的结果。
在CALayer中绘图:
但是当我决定在drawRect:
中实现代码时,发生了这种情况:
即使我在白色空间内绘制,图形也会在外面呈现,如上所示。我使用的代码完全相同。我将其从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);
答案 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);