Das folgende Bild wurde mit CAShapeLayer
erstellt. Die graue Schicht ist eine Unterschicht der roten Schicht.CALayer subLayer Grenzen Rundungsfehler?
Wenn Sie sich die grauen Schichtränder genau ansehen, sehen Sie, dass die roten Schichtränder ausbluten - als ob die graue Schicht die Breite falsch berechnet. Dies sollte unmöglich sein, da ich die Breite der grauen Ebene genau auf die Breite der roten Ebene einstelle und die graue Ebene eine Unterschicht der roten Ebene ist. Wenn ich ihre Breiten drucke, sind sie genau die gleiche Nummer.
Weiß jemand, was schief läuft und wie man das beheben kann? Code unten.
Es scheint sich um einen Rundungsfehler zu handeln, da die Anpassung der Rahmenbreite das Problem bei bestimmten Werten behebt. Dies macht aber immer noch keinen Sinn, da der Rundungsfehler für alle Sublayer gleich sein sollte.
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
}
}