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

코드는 I 엉망 뭔가 ... 어떤 제안을 잘 보이지만 생각?

+0

이전에 도형 레이어에서 둥근 끝 캡을 사용하려하지 않았습니다. 모양 레이어가 패스의 라인 캡 스타일과 별도로 라인 모자 스타일을 가지고 있다는 것이 이상하게 보입니다. 모양 레이어에 설치하는 CGPath에서 라인 뚜껑 스타일을 반올림하여 설정하면 어떨까요? –

답변

3

내가이 문제를 발견했다고 생각합니다. 문서는 다음과 같이 말합니다 :

라인 캡 스타일은 선을 그었을 때 열린 경로의 끝점 모양을 지정합니다.

경로를 폐쇄하고 있습니다. 열어 둡니다.

+0

Hehe, 정말 고마워! – RomanHouse