这是我的尝试:
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 模拟器上运行正常(storyboard 的大小为 4.7),但在 5s 和 6+ 上看起来很奇怪:
这是自动布局的问题吗?没有边框,自动布局正常工作。这是我第一次使用蒙版,所以我不确定我所做的是否正确。
round
函数在 viewDidLayoutSubviews
中调用。
有什么想法吗?
viewDidLayoutSubviews
的描述,它会告诉你何时调用该方法,但它似乎不完全适合你想要实现的目标。 - A-LivelayoutSubviews
),以便将来重复使用。 - A-Live