Округление и добавление границы к UIImage - не UIImageView - PullRequest
0 голосов
/ 04 мая 2020

У меня есть расширение, которое закругляет углы UIImage. Это расширение отлично работает. Я также хотел бы добавить обводку / границу к изображению.

Причина, по которой я не делаю все это в UIImageView, заключается в том, что изменяется масштабирование / соотношение сторон изображений, поэтому необходимо округлить и обвести изображение, а не само изображение.

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 для скругления углов и добавления границы / обводки?

1 Ответ

0 голосов
/ 04 мая 2020

Используйте это расширение

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