2017-01-03 17 views
2

私はをカスタムUIView draw(_ rect: CGRect)の中に持っています。パスをグラデーションカラーで塗りつぶしたいと思います。どのように私はそれを行うことができます誰も私を導くことができますか?ベジェパスをグラデーションカラーで塗りつぶす方法

クリップをグラデーションカラーで塗りつぶし、パスを黒色でストロークする必要があります。

SOには問題を解決していない投稿があります。例えばSwift: Gradient along a bezier path (using CALayers)の場合、この記事はUIViewのレイヤーを描画する方法をガイドしますが、UIBezierPathでは描画しません。

NB:私はあなたのこの質問に答えるためにスウィフト-3

+0

の可能性のある重複[スイフト:ベジエ・パスに沿って勾配(CALayersを使用)](http://stackoverflow.com/questions/27931076/swift-gradient-along-a-bezier-path-using-calayers ) –

+0

これを参照してくださいhttp://stackoverflow.com/questions/23074539/programmatically-create-a-uiview-with-color-gradient –

+0

@ArtemNovichkov私は既にスレッドを調査したが、グラデーションでUIBazierPathを埋めることは何もない。私の意図はUIBazierPathではなく完全な視点ではありません。コメントをありがとう。 –

答えて

10

に取り組んでいます、

私は私のカスタム内部UIBezierPathは(_ RECT:CGRect)を描画するUIView持っ 機能を。パスをグラデーションカラーで塗りつぶしたいと思います。

、我々は勾配のためのマスク層を必要とする

let gradient = CAGradientLayer() 
gradient.frame = path.bounds 
gradient.colors = [UIColor.magenta.cgColor, UIColor.cyan.cgColor] 

、グラデーションを作成するには

let path = UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: 100, height: 100)) 

、あなたが楕円形のパスを持っている

今すぐ設定
let shapeMask = CAShapeLayer() 
shapeMask.path = path.cgPath 

を言うことができますこのshapeLayerとしてmaskgradient層とは、ストロークとベース層を作成subLayer

gradient.mask = shapeMask 
yourCustomView.layer.addSublayer(gradient) 

更新 としてviewの層にそれを追加し、グラデーションレイヤーを作成する前に追加します。

let shape = CAShapeLayer() 
shape.path = path.cgPath 
shape.lineWidth = 2.0 
shape.strokeColor = UIColor.black.cgColor 
self.view.layer.addSublayer(shape) 

let gradient = CAGradientLayer() 
gradient.frame = path.bounds 
gradient.colors = [UIColor.magenta.cgColor, UIColor.cyan.cgColor] 

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

self.view.layer.addSublayer(gradient) 
+0

グラデーションは機能しますが、ストロークは表示されません。 「クリップをグラデーションカラーで塗りつぶし、パスを黒色でストロークさせる必要があります。どのように私はこれを修正することができます。 –

+0

'UIView'をオーバーライドしているので、' draw() 'funcの内部では' self.view.layer'の代わりに 'self.layer'を意味すると仮定します。私はすべてのあなたの更新された指示に従って、かなり近づくが、唯一の黒で境界線を示しています。グラフの途中にストロークは表示されません。 @マット –

+0

あなたは正確に写真に何を表示することができますか? – Matt

関連する問題