2017-01-03 3 views
2

J'ai une UIBezierPath dans ma fonction personnalisée UIView draw(_ rect: CGRect). Je voudrais remplir le chemin avec une couleur dégradée. S'il vous plaît quelqu'un peut-il me guider comment puis-je faire cela.Comment remplir un bézier avec une couleur dégradée

J'ai besoin de remplir le clip avec une couleur dégradée, puis de tracer le chemin avec la couleur noire.

Il y a des messages dans SO qui ne résolvent pas le problème. Par exemple Swift: Gradient along a bezier path (using CALayers) ce poste guide comment dessiner sur une couche dans UIView mais pas dans UIBezierPath.

NB: Je travaille sur Swift-3

+0

double possible de [Swift: gradient le long d'un chemin de Bézier (en utilisant CALayers)] (http://stackoverflow.com/questions/27931076/swift-gradient-along-a-bezier-path-using-calayers –

+0

voir ceci http://stackoverflow.com/questions/23074539/programmatically-create-a-uiview-with-color-gradient –

+0

@ArtemNovichkov J'ai déjà exploré le fil, il n'y a rien sur le remplissage d'un UIBazierPath avec gradient. Mon intention n'est pas la vue complète plutôt un UIBazierPath. Merci pour le commentaire cependant. –

Répondre

10

Pour répondre à cette question de la vôtre,

J'ai un UIBezierPath dans mon habitude UIView dessiner (_ rect: CGRect) fonction . Je voudrais remplir le chemin avec une couleur dégradée.

Disons que vous avez un chemin ovale,

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

Pour créer un gradient,

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

Nous avons besoin d'une couche de masque pour gradient,

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

maintenant réglé ce shapeLayer comme mask de gradient couche et l'ajouter à la couche de view comme subLayer

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

Mise à jour Créer une couche de base ayant subi un AVC et ajouter avant de créer la couche gradient.

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

merci pour votre solution. les travaux de gradient mais le coup n'est pas montré. 'J'ai besoin de remplir le clip avec une couleur de dégradé, puis de tracer le chemin avec la couleur noire'. Comment puis-je réparer cela. –

+0

En remplaçant 'UIView', dans' func() 'func je suppose que vous voulez dire' self.layer' au lieu de 'self.view.layer'. Je suis toutes vos instructions mises à jour, fonctionne assez proche mais il ne montre que des bordures noires. Aucun trait au milieu du graphique n'est visible. @Matt –

+0

pouvez-vous montrer ce que vous voulez exactement dans une image? – Matt