我想为个人资料头像创建一个圆圈图片视图。我试过这个: -
class CircleImageView: UIImageView {
override func draw(_ rect: CGRect) {
// Drawing code
layer.masksToBounds = true
layer.cornerRadius = min(rect.width/2 , rect.height/2)
clipsToBounds = true
}
}
但它不起作用。
答案 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
方法中做到这一点。