这是我的尝试:
func round() {
let width = bounds.width < bounds.height ? bounds.width : bounds.height
let mask = CAShapeLayer()
mask.path = UIBezierPath(ovalInRect: CGRectMake(bounds.midX - width / 2, bounds.midY - width / 2, width, width)).CGPath
self.layer.mask = mask
// add border
let frameLayer = CAShapeLayer()
frameLayer.path = mask.path
frameLayer.lineWidth = 4.0
frameLayer.strokeColor = UIColor.whiteColor().CGColor
frameLayer.fillColor = nil
self.layer.addSublayer(frameLayer)
}
它适用于iphone 6模拟器(故事板的大小为4.7),但在5s和6+上它看起来很奇怪:
这是自动布局问题吗?没有边框,自动布局工作正常。这是我第一次使用面具,所以我不确定我所做的是否正确。
在round
中调用 viewDidLayoutSubviews
函数。
有什么想法吗?
答案 0 :(得分:4)
最简单的方法是操纵图像视图本身的layer
。
imageView.layer.cornerRadius = imageView.bounds.size.width / 2.0
imageView.layer.borderWidth = 2.0
imageView.layer.borderColor = UIColor.whiteColor.CGColor
imageView.layer.masksToBounds = true
您可以在viewDidLayoutSubviews
或layoutSubviews
中加入此内容,以确保尺寸始终正确。
注意:也许这种技术会使你的圆圈面具过时;-)。根据经验,始终选择最简单的解决方案。