如何为方面适合模式设置带圆角的UIImageView

cow*_*bjt 18 objective-c rounded-corners cornerradius ios swift

我通常使用以下代码来设置圆角.

imageView.layer.cornerRadius = 10
Run Code Online (Sandbox Code Playgroud)

当imageView设置为Aspect Fill时,它可以工作.

但是当imageView设置为Aspect Fit模式时,imageView和图片之间的比例会有所不同.圆角效果无法分辨.

在此输入图像描述

背景颜色设置为绿色以显示圆角.

有没有办法将'真实图像部分'设置为圆角.

提前感谢您的回答.

Aru*_*aya 36

将此扩展名用于UIImageView:

extension UIImageView
{
    func roundCornersForAspectFit(radius: CGFloat)
    {
        if let image = self.image {

            //calculate drawingRect
            let boundsScale = self.bounds.size.width / self.bounds.size.height
            let imageScale = image.size.width / image.size.height

            var drawingRect: CGRect = self.bounds

            if boundsScale > imageScale {
                drawingRect.size.width =  drawingRect.size.height * imageScale
                drawingRect.origin.x = (self.bounds.size.width - drawingRect.size.width) / 2
            } else {
                drawingRect.size.height = drawingRect.size.width / imageScale
                drawingRect.origin.y = (self.bounds.size.height - drawingRect.size.height) / 2
            }
            let path = UIBezierPath(roundedRect: drawingRect, cornerRadius: radius)
            let mask = CAShapeLayer()
            mask.path = path.cgPath
            self.layer.mask = mask
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

不调用此函数

调用此扩展方法后


ama*_*ain 5

Swift 3版本的有用,接受的答案就在这里!

extension UIImageView {
func roundCornersForAspectFit(radius: CGFloat)
{
    if let image = self.image {

        //calculate drawingRect
        let boundsScale = self.bounds.size.width / self.bounds.size.height
        let imageScale = image.size.width / image.size.height

        var drawingRect : CGRect = self.bounds

        if boundsScale > imageScale {
            drawingRect.size.width =  drawingRect.size.height * imageScale
            drawingRect.origin.x = (self.bounds.size.width - drawingRect.size.width) / 2
        }else {
            drawingRect.size.height = drawingRect.size.width / imageScale
            drawingRect.origin.y = (self.bounds.size.height - drawingRect.size.height) / 2
        }
        let path = UIBezierPath(roundedRect: drawingRect, cornerRadius: radius)
        let mask = CAShapeLayer()
        mask.path = path.cgPath
        self.layer.mask = mask
        }
    }
}
Run Code Online (Sandbox Code Playgroud)