首页 > 解决方案 > 舍入并向 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 扩展并添加边框/描边?

标签: iosswiftuiimageuibezierpathcgrect

解决方案


使用这个扩展

 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() }
     }

推荐阅读