我制作了一个自定义类,它将使方形图像成为圆形。在我的XIB中,我让imageView
向本课程确认。用来获得循环的图像。
但是,当我在viewWillAppear
中进行api调用以从服务器获取图像并将服务器中的网址分配给imageview
时,我得到了类似于图像的五边形,而不是圆圈形状...
在呈现视图时是否将自定义类(使imageview为圆形)分配给imageview,之后调用api并获取图像的url或任何此类原因。但仍然为什么imaegview获得这样的形状我无法弄清楚..
答案 0 :(得分:3)
使用
imageView.layer.maskToBounds = true
imageView.layer.cornerRadius = imageView.frame.width/2.0
imageView.clipsToBounds = true
imageview的宽度和高度必须相同。
在viewwillappear中,如果您有固定的宽度和高度,则不会修复边界,因此只有角半径可以工作。根据您的屏幕截图,您可能看起来没有相同的高度。请查看一次。
@bwv从视图中使用服务调用的好习惯确实出现了
答案 1 :(得分:0)
首先要记住的是......
要制作imgView square,它必须是正方形
其次,imgView.clipsToBounds = true
剪切其边界,没有它你将看不到圆形图像视图。
所以最终,你需要关注......
imgView.layer.cornerRadius = imgView.frame.height/2.0 //you can use height too as with are same.
imgView.clipsToBounds = true
答案 2 :(得分:-1)
Rob的回答How to add a border to a circular image with mask创建了下面的课程。然后给你UIImageView
那个班级。
@IBDesignable
class photo: UIImageView {
private weak var borderLayer: CAShapeLayer?
override func layoutSubviews() {
super.layoutSubviews()
// create path
let width = min(bounds.width, bounds.height)
let path = UIBezierPath(arcCenter: CGPoint(x: bounds.midX, y: bounds.midY), radius: width / 2, startAngle: 0, endAngle: .pi * 2, clockwise: true)
// update mask and save for future reference
let mask = CAShapeLayer()
mask.path = path.cgPath
layer.mask = mask
// create border layer
let frameLayer = CAShapeLayer()
frameLayer.path = path.cgPath
frameLayer.lineWidth = 10.0
frameLayer.strokeColor = UIColor.white.cgColor
frameLayer.fillColor = nil
// if we had previous border remove it, add new one, and save reference to new one
borderLayer?.removeFromSuperlayer()
layer.addSublayer(frameLayer)
borderLayer = frameLayer
}
}