ios - 舍入并向 UIImage 添加边框 - 不是 UIImageView
问题描述
我有一个围绕 UIImage 角落的扩展。这个扩展很好用。我还想为图像添加笔触/边框。
我不在 UIImageView 上做所有这些的原因是因为图像的缩放/纵横比发生了变化,所以它需要对图像进行四舍五入和描边,而不是 imageView 本身。
extension UIImage{
var roundedImage: UIImage {
let rect = CGRect(origin:CGPoint(x: 0, y: 0), size: self.size)
let border = CAShapeLayer()
border.path = CGPath(rect: rect, transform: nil)
border.lineWidth = 10
border.strokeColor = UIColor.red.cgColor
UIGraphicsBeginImageContextWithOptions(self.size, false, 1)
UIBezierPath(
roundedRect: rect,
cornerRadius: 40
).addClip()
self.draw(in: rect)
return UIGraphicsGetImageFromCurrentImageContext()!
}
}
CAShapeLayer()
我通过添加添加红色笔触取得了进展。只是无法弄清楚如何将其添加到roundedImage
. 或者,如果这甚至是正确的方法。
如何为两个圆角创建 UIImage 扩展并添加边框/描边?
解决方案
使用这个扩展
extension UIImage {
var rounded: UIImage? {
let rect = CGRect(origin: .zero, size: size)
UIGraphicsBeginImageContextWithOptions(size, false, 0)
defer { UIGraphicsEndImageContext() }
let bezierPath = UIBezierPath(roundedRect: rect, cornerRadius: 40)
bezierPath.addClip()
bezierPath.lineWidth = 10
draw(in: rect)
guard let context = UIGraphicsGetCurrentContext() else { return nil }
context.setStrokeColor(UIColor.red.cgColor)
bezierPath.lineWidth = 10
bezierPath.stroke()
return UIGraphicsGetImageFromCurrentImageContext() }
}
推荐阅读
- python - 当创建对象的用户被删除时,如何将默认用户添加到对象
- javascript - JavaScript 中的异步原语是什么?
- docker - 为什么在 dockerfile 中添加文件 /etc/crontabs/www-data 将使运行容器时 www-data 的 cron 作业(基于高山)
- php - 在数组值中搜索以获取 php 中的主键
- swift - 如果 String 和 Array 被实现为结构,这是否意味着它们的大小也受到堆栈大小的限制?
- c++ - 转发从函数指针推导出的参数时,C++ 没有隐式转换
- android - 在 Google Play 商店重新发布应用程序
- angular - 如何在 Angular 7 中使用 http post 请求获取数据
- java - 毕业构建“ClassNotFoundException”
- windows - 想要有人描述这些代码行如何工作并解释它是否是病毒?