2017-03-20 4 views
-1

私はいくつかのトピックを読んだことがありますが、私には適用できません... UIBezierPathで描画された弧にグラデーションカラーを適用しようとしています。 問題は、私のグラデーションがリングだけでなくすべての円を埋めることです。私のグラデーションをBezierPathの円弧に設定しました

func layerWith(size: CGSize, color: UIColor) -> CALayer { 
    let layer: CAShapeLayer = CAShapeLayer() 
    var path: UIBezierPath = UIBezierPath() 
    let lineWidth: CGFloat = 2 

    layer.backgroundColor = nil 
    layer.path = path.cgPath 
    layer.frame = CGRect(x: 0, y: 0, width: size.width, height: size.height) 


    switch self { 
    case .ring: 
     path.addArc(withCenter: CGPoint(x: size.width/2, y: size.height/2), 
        radius: size.width/2, 
        startAngle: 0, 
        endAngle: CGFloat(2 * M_PI), 
        clockwise: false); 

     layer.fillColor = UIColor.clear.cgColor 
     layer.strokeColor = color.cgColor 
     layer.lineWidth = lineWidth 

     let colorGradStart = UIColor(red: 0/255, green: 209/255, blue: 192/255, alpha: 1.0) 
     let colorGradEnd = UIColor(red: 00/255, green: 99/255, blue: 91/255, alpha: 1.0) 

     let gradient = CAGradientLayer() 
     gradient.frame = path.bounds 
     gradient.colors = [colorGradStart.cgColor, colorGradEnd.cgColor] 

     let shapeMask = CAShapeLayer() 
     shapeMask.path = path.cgPath 
     gradient.mask = shapeMask 


     layer.addSublayer(gradient) 
    } 
    return layer 
} 

このコードは、塗りつぶされたすべてのフォームにグラデーションを適用しています。私は弧が必要です。

+0

CABezierPath?またはUIBezierPath? –

+0

CABezierPahのようなものはありません。私はUIBezierPathを意味すると思いますか? –

+0

@ElTomato UIBezierPath、ただの間違い。申し訳ありません – John

答えて

0

これを行う1つの方法は、グラデーションレイヤーにCAShapeLayerをマスクとして適用することです。次に、グラデーションが表示されます。

+0

私はおそらく私のサークルがまだ満たされている何か原因が不足しています。 – John

+0

質問を編集して、そのコードを下部に表示してください。 –

+0

編集が完了しました – John

0

レイヤーではなく、shapeMaskのfillColorとstrokeColorを設定する必要があります。

関連する問題