2017-07-27 76 views
0

我已經看到了這一點How to get a border on UIBezierPath的曲線形狀圖層繪製邊框

我希望藉助曲線邊框

我畫曲線與下面的方法

func drawCurve(from startPoint: CGPoint, to endPoint: CGPoint, controlPoint: CGPoint) { 

    var bezierPath = UIBezierPath() 
    bezierPath.move(to: startPoint) 
    //  bezierPath.addQuadCurve(to: endPoint, controlPoint: CGPoint 
    bezierPath.addLine(to: controlPoint) 
    bezierPath.addLine(to: endPoint); 


    bezierPath = bezierPath.bezierCardinal(withTension: 2.06) 
    curveSize = bezierPath.bounds 
    let strokeColor = UIColor.white 
    if curveLayer != nil { 
     curveLayer?.removeFromSuperlayer() 
     curveLayer = nil 
    } 
    curveLayer = CAShapeLayer() 
    curveLayer?.lineWidth = 1.0/self.zoomScale 
    curveLayer?.fillColor = UIColor.clear.cgColor 
    curveLayer?.path = bezierPath.cgPath 
    curveLayer?.strokeColor = strokeColor.cgColor 
    viewBase.layer.addSublayer(curveLayer!) 
} 

我已經儘量把

curveLayer?.borderWidth = 1.0 
    curveLayer?.borderColor = UIColor.yellow.cgColor 

但它沒有畫出邊框(框內)

enter image description here

回答

0

隨着阿布舍克的想法,我有畫邊框的外形與此代碼

let bazierPath2 = UIBezierPath.init(rect: curveSize) 


curveLayerForGingivalLine = CAShapeLayer() 
curveLayerForGingivalLine?.zPosition = 0.0 
curveLayerForGingivalLine?.strokeColor = UIColor.red.cgColor 
curveLayerForGingivalLine?.lineWidth = 1.0/self.zoomScale 
curveLayerForGingivalLine?.fillColor = UIColor.clear.cgColor 

let lineShapeBorder = CAShapeLayer() 

curveLayerForGingivalLine?.addSublayer(lineShapeBorder) 

lineShapeBorder.lineWidth = 1.0/self.zoomScale 
lineShapeBorder.fillColor = UIColor.clear.cgColor 
lineShapeBorder.path = bezierPath.cgPath 
lineShapeBorder.strokeColor = strokeColor.cgColor 
curveLayerForGingivalLine?.path = bazierPath2.cgPath 
viewBase.layer.addSublayer(curveLayerForGingivalLine!) 
1

試試下面代碼 -

lineShapeBorder = CAShapeLayer() 
lineShapeBorder.zPosition = 0.0 
lineShapeBorder.strokeColor = UIColor.blue.cgColor 
lineShapeBorder.lineWidth = 25 
lineShapeBorder.lineCap = kCALineCapRound 
lineShapeBorder.lineJoin = kCALineJoinRound 
lineShapeFill = CAShapeLayer() 
lineShapeBorder.addSublayer(lineShapeFill) 
lineShapeFill.zPosition = 0.0 
lineShapeFill.strokeColor = UIColor.green.cgColor 
lineShapeFill.lineWidth = 20.0 
lineShapeFill.lineCap = kCALineCapRound 
lineShapeFill.lineJoin = kCALineJoinRound 
    // ... 
var path = UIBezierPath() 
path.move(to: lineStart) 
path.addLine(to: lineEnd) 
lineShapeFill.path = path.cgPath 
lineShapeBorder.path = lineShapeFill.path 

希望它能幫助!

+0

你能解釋一下PLS代碼? –

+0

我們創建了線寬爲25的lineShapeBorder,因此它作爲邊框,並在lineShapeBorder中添加了線寬爲20的lineShapeFill,因此它充當主層或內層。 –

+0

這裏我的'curveLayer'會是'lineShapeFill'? –