下图是使用CAShapeLayer
构建的。灰色层是红色层的子层。
如果仔细观察灰色层边缘,您会看到红色层边缘渗漏出来——就好像灰色层错误地计算了它的宽度一样。这应该是不可能的,因为我将灰色层的宽度设置为红色层的宽度,而灰色层是红色层的子层。当我打印它们的宽度时,它们是完全相同的数字。
有谁知道出了什么问题以及如何解决这个问题?代码如下。
这似乎是某种舍入误差,因为调整框架宽度最终可以解决某些值的问题。但这仍然没有意义,因为所有子层的舍入误差应该相同。
class MyLayer {
var redLayer = CAShapeLayer()
var grayLayer = CAShapeLayer()
init() {
redLayer.addSublayer(graylayer)
}
func layoutSublayers(_ bounds: CGRect) {
redLayer.frame = bounds
grayLayer.frame = CGRect(x: 0,
y: 0,
width redLayer.bounds.width,
height: redLayer.bounds.height/2)
draw()
}
func draw() {
redLayer.fillColor = UIColor.red.cgColor
redLayer.path = UIBezierPath(rect: redLayer.bounds).cgPath
grayLayer.fillColor = UIColor.darkGray.cgColor
grayLayer.path = UIBezierPath(rect: grayLayer.bounds).cgPath
}
}
最佳答案
设置大小后尝试在layoutSublayers
内添加灰色层。像这样:
override func layoutSublayers(of layer: CALayer) {
redLayer.addSublayer(graylayer)
}
关于ios - CALayer subLayer 边界舍入误差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44706052/