在 UIImage 上覆盖较小的矩形

Overlay a smaller rectangle on a UIImage

提问人:Lor Kam Hoi 提问时间:3/24/2022 最后编辑:Lor Kam Hoi 更新时间:3/25/2022 访问量:102

问:

我想在图像中叠加一个矩形。下面的代码目前有效,但它返回一个带有细框架的矩形。我无法更改矩形框架宽度。返回边框较粗的自定义矩形的一种方法是使用 UIView,但无法向 UIImage 添加 SubView。有什么解决办法吗?谢谢。

-(UIImage *)drawRectangleOnImage:(UIImage *)img rect:(CGRect )rect{

CGSize imgSize = img.size;
CGFloat scale = 0;
UIGraphicsBeginImageContextWithOptions(imgSize, NO, scale);
[img drawAtPoint:CGPointZero];
[[UIColor redColor] setStroke];
UIRectFrame(rect);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;

}

iOS Objective-C UIView UIIume查看

评论

0赞 Phil Dukhov 3/24/2022
“无法将 SubView 添加到 UIImage”是不正确的。界面构建器不会让你这样做,但在代码中添加子视图没有问题。UIImage

答:

1赞 adeasismont 3/24/2022 #1

UIRectFrame 在指定矩形的内侧绘制一个框架。如果要改为填充该区域,可以使用 UIRectFill

要更改描边和/或填充颜色,您可以调用 或 on 。例如:-setStroke-setFillUIColor

[[UIColor red] setFill];
UIRectFill(rect);

要设置笔触线宽,您需要在当前 CGContext 上设置线宽:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 10);

编辑: 还有一种更简单的方法:NSFrameRectWithWidth 允许您直接指定宽度,而不是在上下文中设置行宽。

评论

0赞 Lor Kam Hoi 3/24/2022
不,我不想要一个填充的矩形。我只需要框架。
1赞 adeasismont 3/24/2022
我更新了答案,以包含有关如何检索当前 CGContext 和更改行宽的详细信息。
1赞 adeasismont 3/25/2022
@LorKamHoi对不起,再看一眼,还有一种更简单的方法。把它添加到我的答案中。