2017-06-22 18 views
0

以下の画像はCAShapeLayerを使用して作成されています。灰色層は赤色層の副層である。CALayer subLayer bounds丸め誤差?

灰色のレイヤーのエッジをよく見ると、赤いレイヤーのエッジが滲み出ていることがわかります。灰色のレイヤーがその幅を誤って計算しているようです。これは、灰色のレイヤーの幅を赤色のレイヤーの幅に設定し、灰色のレイヤーを赤色のレイヤーのサブレイヤーに設定するため、不可能です。幅を印刷するとき、それらは正確に同じ番号です。

誰かが間違っていて、これを修正する方法を知っていますか?以下のコード。

フレーム幅を調整すると、最終的に特定の値に問題が解決されるため、丸め誤差のように見えます。しかし、丸め誤差はすべての副層で同じでなければならないので、これはまだ意味をなさない。

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 
     } 

} 

答えて

0

セットサイズ後layoutSublayers内側の灰色層を追加してみます。このように:

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