Поместите изображение в округлый CGRect - PullRequest
0 голосов
/ 28 мая 2020

Мне нужно поместить фоновое изображение внутри скругленного CGRect.

Я могу сделать угол CGRect скругленным, используя приведенный ниже код.

let cornerRadius = CGSize(width: 4.0, height: 4.0)
let bezierPath = UIBezierPath(roundedRect: barRect, byRoundingCorners: UIRectCorner(rawValue: UIRectCorner.topLeft.rawValue | UIRectCorner.topRight.rawValue), cornerRadii: cornerRadius)
context.addPath(bezierPath.cgPath)
context.fillPath()

Я могу нарисовать изображение в CGRect, как показано ниже.

context.draw(image, in: barRect)

Но я не могу закруглить угол пути, так как я должен использовать fillPath(), и он делает фон как solid цвет.

1 Ответ

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

Попробуйте это расширение:

extension UIImage {

    public func imageWithRounded(corners theCorners: UIRectCorner, radius: CGFloat) -> UIImage {
        let cornerRadius = CGSize(width: radius, height: radius)
        let rect = CGRect(origin: .zero, size: size)
        let renderer = UIGraphicsImageRenderer(size: size)
        let img = renderer.image { ctx in
            UIBezierPath(roundedRect: rect, byRoundingCorners: theCorners, cornerRadii: cornerRadius).addClip()
            draw(in: rect)
        }
        return img
    }

}

И используйте его так:

guard let img = UIImage(named: "myImage") else { return }
let roundedImage = img.imageWithRounded(corners: [.topLeft, .topRight], radius: 20.0)
...