使用CGContextClip将UIView剪切为圆形

时间:2013-01-10 12:07:26

标签: objective-c cgcontext

我查看了各种类似的问题,似乎仍然无法让我的代码工作。我有一个带有图像的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);

我哪里出错了?谢谢你的阅读。

1 个答案:

答案 0 :(得分:4)

radius=centre.x似乎错了。半径应为宽度或高度的一半:

CGFloat radius = 0.5*bounds.size.width;

您也可以使用便利功能

CGPathRef path = CGPathCreateWithEllipseInRect(bounds, NULL);

更新:事实证明,实际问题是在绘制图像后修改了裁剪路径。

剪切路径用于所有未来的绘图操作,因此必须在绘图之前设置