2016-10-07 4 views
1

丸みを帯びたコーナーを描いて斜め線を描きたい。 マイコード:CAShapeLayerラインの丸い角

class DiagonalView: UIView { 

// MARK: - Public Properties 

@IBInspectable var fillColor: UIColor = UIColor.white { 
    didSet { 
     self.diagonalLayer.strokeColor = fillColor.cgColor 
     self.redraw() 
    } 
} 

@IBInspectable var lineWidth: CGFloat = 1 { 
    didSet { 
     self.diagonalLayer.lineWidth = lineWidth 
     self.redraw() 
    } 
} 

// MARK: - Private Properties 

private var diagonalLayer: CAShapeLayer = { 
    let layer = CAShapeLayer() 
    layer.fillColor = UIColor.clear.cgColor 
    layer.strokeColor = UIColor.white.cgColor 
    layer.lineCap = kCALineCapRound 
    layer.lineWidth = 1 
    return layer 
}() 

// MARK: - Constructors 

override func awakeFromNib() { 
    super.awakeFromNib() 
    self.layer.addSublayer(self.diagonalLayer) 
    self.setupPath() 
} 

override func layoutSubviews() { 
    super.layoutSubviews() 
    self.setupPath() 
} 

// MARK: - Private methods 

private func redraw() { 
    self.setNeedsDisplay() 
} 

private func setupPath() { 
    let startPoint = CGPoint(x: self.frame.width, y: 0) 
    let endPoint = CGPoint(x: 0, y: self.frame.height) 
    let path = UIBezierPath() 
    path.move(to: startPoint) 
    path.addLine(to: endPoint) 
    path.close() 
    self.diagonalLayer.path = path.cgPath 
} 

} 

ラインポジションが正しいです。しかし、コーナーは丸められません。 結果:

enter image description here

コードがよさそうだが、私の混乱の何か...任意の提案をと思いますか?

+0

私は以前にシェイプレイヤーで丸められたエンドキャップを取得しようとしていませんでした。シェイプレイヤーにパスのラインキャップスタイルとは別のラインキャップスタイルがあるのは奇妙なことです。あなたのシェイプレイヤーにインストールするCGPathで丸みを帯びたラインキャップスタイルを設定するとどうなりますか? –

答えて

3

問題が見つかりました。ドキュメントには次のように書かれています:

行キャップスタイルは、ストローク時に開いたパスの端点の形状を指定します。

パスを閉じています。開いたままにしておきます。

+0

Hehe、ありがとう! – RomanHouse