我查看了各种类似的问题,似乎仍然无法让我的代码工作。我有一个带有图像的UIView([image drawInRect:bounds]
),但我在上下文剪辑中遗漏了一些内容:
// Get context & bounds, and calculate centre & radius
CGContextRef ctx=UIGraphicsGetCurrentContext();
CGRect bounds=[self bounds];
CGPoint centre;
centre.x=bounds.origin.x+0.5*bounds.size.width;
centre.y=bounds.origin.y+0.5*bounds.size.height;
CGFloat radius=centre.x;
// Draw image
UIImage *backImage=[UIImage imageNamed:@"backimage.png"];
[backImage drawInRect:bounds];
// Create clipping path and clip context
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddArc(path, NULL, centre.x, centre.y, radius, 0, 2*M_PI, 0);
CGContextAddPath(ctx, path);
CGContextClip(ctx);
我哪里出错了?谢谢你的阅读。
答案 0 :(得分:4)
radius=centre.x
似乎错了。半径应为宽度或高度的一半:
CGFloat radius = 0.5*bounds.size.width;
您也可以使用便利功能
CGPathRef path = CGPathCreateWithEllipseInRect(bounds, NULL);
更新:事实证明,实际问题是在绘制图像后修改了裁剪路径。
剪切路径用于所有未来的绘图操作,因此必须在绘图之前设置。