Как добавить цвет градиента в CAShapeLayer, созданный с использованием UIBezierPath

Я пробовал это и это, но все равно безуспешно. В основном я хочу создать что-то вроде этого (внутренний круг). Круг будет создан в соответствии с некоторыми данными, скажем, если данных 50, мы получим полукруг, а если 100, мы получим полный круг.

введите здесь описание изображения

И это то, что у меня есть до сих пор, так как я могу создать вышеуказанный дизайн

введите здесь описание изображения

Я создал представление с помощью построителя интерфейса и нарисовал этот круг, используя этот код.

override func viewDidLoad() {


    let circlePath = UIBezierPath(arcCenter: CGPoint(x: myView.layer.frame.height/2,y: myView.layer.frame.height/2), radius: CGFloat(100), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true)

    let shapeLayer = CAShapeLayer()
    shapeLayer.path = circlePath.CGPath
    shapeLayer.fillColor = UIColor.clearColor().CGColor
    shapeLayer.strokeColor = UIColor.grayColor().CGColor
    shapeLayer.lineWidth = 3.0

    let colorCirclePath = UIBezierPath(arcCenter: CGPoint(x: myView.layer.frame.height/2,y: myView.layer.frame.height/2), radius: CGFloat(100), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true)

    let coloredShapeLayer = CAShapeLayer()
    coloredShapeLayer.path = colorCirclePath.CGPath
    coloredShapeLayer.fillColor = UIColor.clearColor().CGColor
    coloredShapeLayer.strokeColor = UIColor.whiteColor().CGColor
    coloredShapeLayer.lineWidth = 10.0
    self.myView.layer.addSublayer(coloredShapeLayer)

    self.myView.layer.addSublayer(shapeLayer)



}

Вот как я создаю градиент.

    let gradient: CAGradientLayer = CAGradientLayer()
    let startingColorOfGradient = UIColor(colorLiteralRed: 50/255, green: 189/255, blue: 170/255, alpha: 1.0).CGColor
    let endingColorOFGradient = UIColor(colorLiteralRed: 133/255, green: 210/255, blue: 230/255, alpha: 1.0).CGColor
    gradient.startPoint = CGPoint(x: 1.0, y: 0.5)
    gradient.endPoint = CGPoint(x: 0.0, y: 0.5)
    gradient.colors = [startingColorOfGradient , endingColorOFGradient]
    self.myView.layer.insertSublayer(gradient, atIndex:0)

person Umair Afzal    schedule 07.06.2016    source источник
comment
Как насчет вашей проблемы? Вы решили?   -  person Alessandro Ornano    schedule 09.06.2016


Ответы (1)


Если вам нужна реальная симуляция цвета градиента, вы можете проверить этот ответ SO. Он основан на кресте, который разделил ваш прямоугольный вид на 4 части, затем сдвиньте цвета на каждой части, чтобы получить правильный градиент, применяемый к маске слоя.

person Alessandro Ornano    schedule 07.06.2016