2017-01-03 8 views
2

У меня есть UIBezierPath внутри моего заказа 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 в моем обычае UIView рисовать (_ Прямоугольник: CGRect) функцию. Я хотел бы заполнить путь градиентом цвета.

Допустим, у вас есть овальное путь,

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

Чтобы создать градиент,

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

Нам нужен слой маски для градиента,

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

Теперь установите это shapeLayer как mask отслоя и добавить его в view «ы слоя, как subLayer

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

Update Создать базовый слой с инсультом и добавить перед созданием градиента слоя.

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.layer' вместо 'self.view.layer'. Я следую всем вашим обновленным инструкциям, работает очень близко, но только показывает границы в черном. Показов нет в середине графика. @Matt –

+0

можете ли вы показать, что именно вы хотите на картинке? – Matt

 Смежные вопросы

  • Нет связанных вопросов^_^