我创建了一个CAShapeLayer并将其添加为子图层,而不是直接在view.layer上工作以允许虚线或虚线边框(使用lineDashPattern)。问题是在某些边界宽度和一些角半径值 - 随机垂直线开始出现。放大(如果必须)放在右侧的图片上。
注意:这些线在我的物理测试设备上是垂直的,但在模拟器中是水平的。
Click to see screenshot of test project
我已经创建了一个小型测试项目来证明这一点。在故事板中,我设置了红色正方形和滑块,所有边框工作都在此代码片段的底部完成(为了清晰起见,我已将所有内容都包含在类中):
@IBOutlet weak var testView: UIView!
@IBOutlet weak var slider: UISlider!
var border : CAShapeLayer?
override func viewDidLoad() {
super.viewDidLoad()
updateViewCornerRadius(newCornerRadius: 0.0)
slider.addTarget(self, action: #selector(ViewController.onSliderChange), for: UIControlEvents.valueChanged)
}
func onSliderChange() {
updateViewCornerRadius(newCornerRadius: slider.value)
}
func updateViewCornerRadius(newCornerRadius : Float) {
if border != nil {
border?.removeFromSuperlayer()
}
let cornerRadius = CGFloat(newCornerRadius)
testView.layer.cornerRadius = cornerRadius
border = CAShapeLayer()
border!.masksToBounds = true
border!.cornerRadius = cornerRadius
border!.strokeColor = UIColor.black.cgColor
border!.lineDashPattern = [1, 0]
border!.frame = testView.bounds
border!.fillColor = UIColor.clear.cgColor
border!.path = UIBezierPath(roundedRect: testView.bounds, byRoundingCorners: UIRectCorner.allCorners, cornerRadii: CGSize(width: cornerRadius, height: cornerRadius)).cgPath
border!.lineWidth = 12
testView.layer.addSublayer(border!)
}
有人曾经处理过这个问题吗? UIView或CAShapeLayer上有设置可以摆脱它吗?