Как сделать UIBezierPath с градиентом? [Дубликат]

jQuery.fn определяется сокращением для jQuery.prototype. Из исходного кода :

jQuery.fn = jQuery.prototype = {
    // ...
}

Это означает, что jQuery.fn.jquery является псевдонимом для jQuery.prototype.jquery, который возвращает текущую версию jQuery. Снова из исходного кода :

// The current version of jQuery being used
jquery: "@VERSION",

5
задан Kyle Begeman 13 January 2015 в 21:49
поделиться

1 ответ

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

Вот моя попытка примерно на изображении, которое вы предоставили (я опустил белый метка в центре, но это тривиально):

enter image description here [/g1]

И вот код, который сгенерировал его:

let r = CGRectMake(100,100,130,100)

let g = CAGradientLayer()
g.frame = r
let c1 = UIColor(
    red: 151.0/255.0, green: 81.0/255.0, blue: 227.0/255.0, alpha: 1)
let c2 = UIColor(
    red: 36.0/255.0, green: 176.0/255.0, blue: 233.0/255.0, alpha: 1)
g.colors = [c1.CGColor as AnyObject, c2.CGColor as AnyObject];
self.view.layer.addSublayer(g)

let percent = CGFloat(0.64) // percentage of circle
UIGraphicsBeginImageContextWithOptions(r.size, false, 0)
let con = UIGraphicsGetCurrentContext()
CGContextFillRect(con, CGRect(origin: CGPoint(), size: r.size))
CGContextSetLineWidth(con, 5)
CGContextSetLineCap(con, kCGLineCapRound)
CGContextSetBlendMode(con, kCGBlendModeClear)
let pi = CGFloat(M_PI)
CGContextAddArc(con, r.size.width/2.0, r.size.height/2.0, 30, 
    -pi/2.0, -pi/2.0 + percent*pi*2.0, 0)
CGContextStrokePath(con)
let im = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let b = CALayer()
b.frame = r
b.contents = im.CGImage
self.view.layer.addSublayer(b)

градиентный слой (первая часть кода) - это просто «предложение обслуживания». Если это не тот градиент, который вы хотите, вы можете создать свой собственный. Вы можете нарисовать его в Photoshop и использовать изображение в качестве содержимого слоя градиента. Или вы можете сделать «угловой» слой в коде, используя сторонний код, например https://github.com/paiv/AngleGradientLayer . Цель примера - просто показать, как можно «стереть» дугу в черном слое, чтобы выявить скрытый за ним градиент и, как представляется, рисовать градиентом.

5
ответ дан matt 16 August 2018 в 11:50
поделиться
  • 1
    Это не совсем то, что хочет OP. По мере того, как прогресс приближается к 100%, ваше представление покажет, что он снова становится более фиолетовым, где он должен оставаться более синим в конце " дуги. – Ian MacDonald 14 January 2015 в 01:18
  • 2
    @IanMacDonald Добавил абзац об этом в ответ. – matt 14 January 2015 в 17:19
  • 3
    Есть ли способ добавить анимацию в круг? Я хочу нарисовать анимацию дуги – Reynaldo Aguilar 9 June 2015 в 15:51
  • 4
    @matt: Как я могу изменить цвет фона с черного на белый? – coreDeviOS 4 March 2016 в 09:50
Другие вопросы по тегам:

Похожие вопросы: