2017-06-22 5 views
0

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.

enter image description here

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 
     } 

} 

Antwort

0

innen layoutSublayers graue Schicht nach der Größe Sätze hinzufügen Ausprobieren. So:

override func layoutSublayers(of layer: CALayer) { 
    redLayer.addSublayer(graylayer) 
}