如何使用Swift为遮罩后的图片添加边框?
如何使用Swift为遮罩后的图片添加边框?
嘿,我看你已经做出了遮罩后的图片,想要给它们加上贴合遮罩形状的边框对吧?这事儿在Swift里其实有挺实用的实现方法,我给你整理两种常用的方案:
先提一句,你提供的代码片段是这样的:
// // Collage_Layout_1.swift // Snapcial // // Created by Jecky Modi on 15/02/25. // class Collage_Layout_1的内容
方法一:给视图添加形状边框层(适合UI上显示的场景)
如果你是通过layer.mask给UIImageView加的遮罩,那可以直接基于遮罩的路径创建一个边框图层,贴到图片视图上:
// 假设你已经有了生成遮罩用的UIBezierPath(比如maskPath) let borderLayer = CAShapeLayer() // 用遮罩的路径来定义边框的形状 borderLayer.path = maskPath.cgPath // 设置边框的颜色,这里用红色举例,你可以改成自己需要的颜色 borderLayer.strokeColor = UIColor.red.cgColor // 边框的宽度,按需调整 borderLayer.lineWidth = 3.0 // 填充色设为透明,只保留边框线条 borderLayer.fillColor = UIColor.clear.cgColor // 把这个边框层添加到你的图片视图的layer上 yourImageView.layer.addSublayer(borderLayer)
这种方法的好处是边框会完美贴合遮罩的形状,而且不需要重新生成图片,直接在视图层面添加,性能也不错。
方法二:绘制时直接生成带边框的遮罩图片(适合保存或复用图片的场景)
如果你需要直接生成带边框的图片文件,而不是在视图上显示,那可以在Core Graphics绘制遮罩的同时,顺便把边框画出来:
func generateMaskedImageWithBorder(originalImage: UIImage, maskPath: UIBezierPath, borderColor: UIColor, borderWidth: CGFloat) -> UIImage? { // 开启图片绘制上下文 UIGraphicsBeginImageContextWithOptions(originalImage.size, false, UIScreen.main.scale) // 确保上下文能被正确关闭 defer { UIGraphicsEndImageContext() } // 先绘制原始图片 originalImage.draw(at: .zero) // 应用遮罩裁剪 maskPath.addClip() originalImage.draw(at: .zero) // 开始绘制边框 borderColor.setStroke() maskPath.lineWidth = borderWidth maskPath.stroke() // 从上下文里取出最终的图片 return UIGraphicsGetImageFromCurrentImageContext() }
你只需要传入原始图片、遮罩路径、边框颜色和宽度,就能得到带边框的遮罩图片啦,直接用这个返回的图片就行。
备注:内容来源于stack exchange,提问作者Jitendra Modi
相关产品推荐
相关产品推荐

