2014-08-28 7 views
0

Я хочу обратить круговой обзор хода с градиентом, как изображение:Как нарисовать градиент в прошивкой

Design Image

Я попытался кодом ниже, но результат цвет не является правильным. Это мой код:

//draw gradient 

    CGFloat colors [] = { 
     1.0, 0.7, 
     0.2, 0.4 

    }; 

    CGFloat locations[] = { 0.0, 1.0 }; 


    CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceGray(); // gray colors want gray color space 


    CGGradientRef gradient = CGGradientCreateWithColorComponents(baseSpace, colors, locations, 2); 
    CGColorSpaceRelease(baseSpace), baseSpace = NULL; 

    CGContextSaveGState(context); 
    CGContextAddPath(context, progressPath); 
    CGContextClip(context); 

    CGRect boundingBox = CGPathGetBoundingBox(progressPath); 
    CGPoint gradientStart = CGPointMake(0.0, CGRectGetMinY(boundingBox)); 
    CGPoint gradientEnd = CGPointMake(1.0, CGRectGetMaxY(boundingBox)); 

    CGContextDrawLinearGradient(context, gradient, gradientStart, gradientEnd, 0); 
    CGGradientRelease(gradient), gradient = NULL; 
    CGContextRestoreGState(context); 

progressPath является строка прогресса с цветом:

[UIColor colorWithRed:21/255.0f green:182/255.0f blue:217/255.0f alpha:1.0] 

UPDATE:

Это изображение мой код, созданный: Result Image В результате изображение не тот же дизайн, цвет не то же самое. Я не знаю, почему.

Пожалуйста, помогите мне исправить это. Заранее спасибо.

+0

К сожалению, в моем ответе предполагается, что вы хотите использовать градиент угла, но при ближайшем рассмотрении похоже, что на самом деле изображение использует линейный градиент. Можете ли вы отправить изображение изображения, которое производит этот код, чтобы мы могли видеть, что не так с выходом? –

+0

Вместо того, чтобы рисовать серые цвета с альфа-каналом на синем фоне, попробуйте использовать цвета RGB, которые вы выбираете из исходного изображения. По моим измерениям они должны быть RGB (78, 95, 99) и RGB (139, 206, 227). –

ответ

0

Вид градиента, который вы ищете, где цвет меняется в зависимости от угла вокруг центральной точки, называется градиентом угла. К сожалению, у iOS нет встроенного способа рисования угловых градиентов, но вы можете сделать это, используя библиотеку с открытым исходным кодом, такую ​​как paiv/AngleGradientLayer.

+0

Я думаю, что я использовал неправильный цвет градиента. Не могли бы вы мне помочь? Спасибо – user3884889

0

Рабочий код:

- (void) setGradientWithFrame:(CGRect)frame 
{ 
    //create the gradient 
    CAGradientLayer *gradient = [CAGradientLayer layer]; 
    gradient.frame = frame; 
    //this example is white-black gradient, change it to the color you want.. 
    gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor], (id)[[UIColor blackColor] CGColor], nil]; 
    gradient.cornerRadius = frame.size.height/2.0f; 
    [self.view.layer insertSublayer:gradient atIndex:0]; 

    CALayer *whiteCircle = [CALayer layer]; 
    whiteCircle.frame = CGRectMake(frame.origin.x + 10, frame.origin.y + 10, frame.size.width - 20, frame.size.height - 20); 
    whiteCircle.backgroundColor = [[UIColor whiteColor] CGColor]; 
    whiteCircle.cornerRadius = whiteCircle.frame.size.width/2.0f; 
    [self.view.layer insertSublayer:whiteCircle atIndex:1]; 

    CALayer *whitesquare = [CALayer layer]; 
    whitesquare.frame = CGRectMake(50, frame.size.height - 20, 25, 25); 
    whitesquare.backgroundColor = [[UIColor whiteColor] CGColor]; 
    whitesquare.transform = CATransform3DMakeRotation(-20.0/180.0 * M_PI, 0.0, 0.0, 1.0); 
    [self.view.layer insertSublayer:whitesquare atIndex:2]; 
} 

вызвать метод:

[self setGradientWithFrame:CGRectMake(0, 0, 100, 100)]; 

PS. измените цвет на цвет градиента на нужный вам цвет:

+0

Спасибо, но это не работает в моем случае. Я рисую его в drawRect(). Я обновил свой вопрос. Pls. проверить. благодаря – user3884889

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