创建圆形图像查看IOS问题

时间:2016-12-13 07:28:45

标签: ios swift uiimageview custom-view

我想为个人资料头像创建一个圆圈图片视图。我试过这个: -

   class CircleImageView: UIImageView {

    override func draw(_ rect: CGRect) {
        // Drawing code

        layer.masksToBounds = true
        layer.cornerRadius = min(rect.width/2 , rect.height/2)
        clipsToBounds = true


    }
}

但它不起作用。

3 个答案:

答案 0 :(得分:1)

extension很适合设置角落或做圆形图像:

extension UIImageView {
    func setRadius(radius: CGFloat? = nil) {
        self.layer.cornerRadius = radius ?? self.frame.width / 2;
        self.layer.masksToBounds = true;
    }
}

使用:

imgview.setRadius(radius: 10)
imgview.setRadius() //default frame.width/2

答案 1 :(得分:1)

绘图功能用于绘制不更改图层。

使用layoutSubviews

override func layoutSubviews() {
    super.layoutSubviews()

        layer.masksToBounds = true
        layer.cornerRadius = min(self.frame.width/2 , self.frame.height/2)
        clipsToBounds = true

}

答案 2 :(得分:1)

您要将代码添加到错误的位置,drawRect:不是用于编辑图层的正确方法,您可以通过以下方式实现:

init(frame:) imageView时编辑图层(同样,在init(coder:)中添加相同的功能,因为它应该适用于这两种方法:编程和故事板):

class CircleImageView: UIImageView {
    override init(frame: CGRect) {
        super.init(frame: frame)

        setupCircleLayer()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        setupCircleLayer()
    }

    private func setupCircleLayer() {
        layer.masksToBounds = true
        layer.cornerRadius = min(frame.width/2 , frame.height/2)
        clipsToBounds = true
    }
}

或者@Mohammadalijf通过覆盖his answer方法在layoutSubviews()中建议:

class CircleImageView: UIImageView {
    override func layoutSubviews() {
        super.layoutSubviews()

        layer.masksToBounds = true
        layer.cornerRadius = min(frame.width/2 , frame.height/2)
        clipsToBounds = true
        backgroundColor = UIColor.black
    }
}

它具有您所要求的理想功能,但请注意:

  

子类可以根据需要覆盖此方法以执行更精确的操作   他们的子视图的布局。 如果是,则应该仅覆盖此方法   子视图的自动调整和基于约束的行为不会   提供你想要的行为。您可以使用您的实现进行设置   您的子视图的框架矩形直接。

即,它与更新视图的布局有关,请查看文档以获取更多信息;这就是为什么我更喜欢在init方法中做到这一点。