IPhone - Help with CGGradientCreateWithColorComponents and creating a gradient according to the screenshot

I am trying to apply the same gradient as the screenshot below using CGGradientCreateWithColorComponents.

This is what I am using at the moment, but it is not entirely correct, and I try to better guess these values. I would also like to know how to actually determine what these values ​​represent, since this code was captured from a textbook, which did not explain much in terms of what the components are.

CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB();
CGFloat components[8] = { 1, 1, 1, 1, 0.866, 0.866, 0.866, 1 };
CGFloat locations[2] = { 0.0, 1.0 };

CGGradientRef myGradient = CGGradientCreateWithColorComponents(myColorspace, components, locations, 2);

enter image description here

+3
source share
4 answers

I played with him and got this photo:

enter image description here

with flowers:

static const CGFloat colors [] = { 
0.894, 0.894, 0.894, 1.0, 
0.694, 0.694, 0.694, 1.0
};

using this piece of code:

- (void) drawRect:(CGRect)rect {
   CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB();
   CGGradientRef gradient = CGGradientCreateWithColorComponents(baseSpace, colors, NULL, 2);
   CGColorSpaceRelease(baseSpace), baseSpace = NULL;

   CGContextRef context = UIGraphicsGetCurrentContext();
   CGContextClearRect(context, rect);
   CGContextSaveGState(context);

   CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
   CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));

   CGContextClip(context);
   CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);

   CGGradientRelease(gradient), gradient = NULL;

   CGContextRestoreGState(context);
   [super drawRect:rect];
 }

I do not know if this is enough.

+10
source

0.866 - RGB , 100. Mac, /, DigitalColor Meter. RGB . , . R% 76.5, 0,765.

+4

CGGradient,

RGB + Alpha

1 = 1,1,1,1

2 = 0,866,0,866,0,866,1

,

, , ... !

+3

-(void) drawRoundedRectWithContext:(CGContextRef)context withRect:(CGRect)rect{
CGFloat radius = CGRectGetMaxY(rect)*self.badgeCornerRoundness;
CGFloat puffer = CGRectGetMaxY(rect)*0.10;

CGFloat maxX = CGRectGetMaxX(rect) - puffer;
CGFloat maxY = CGRectGetMaxY(rect) - puffer;
CGFloat minX = CGRectGetMinX(rect) + puffer;
CGFloat minY = CGRectGetMinY(rect) + puffer;

CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();

 CGFloat locations[3] = { 0.0, 0.5, 1.0 };
 CGFloat colors[] =
 {
 255.0 / 255.0, 200.0 / 255.0, 200.0 / 255.0, 1.00,
 230 / 255.0,  0.0 / 255.0, 0.0 / 255.0, 1.00,
 190 / 255.0,  0.0 / 255.0, 0.0 / 255.0, 1.00,
 };
CGGradientRef gradient = CGGradientCreateWithColorComponents(rgb, colors, locations, 3);
CGColorSpaceRelease(rgb);

CGContextBeginPath(context);
CGContextAddArc(context, maxX-radius, minY+radius, radius, M_PI+(M_PI/2), 0, 0);
CGContextAddArc(context, maxX-radius, maxY-radius, radius, 0, M_PI/2, 0);
CGContextAddArc(context, minX+radius, maxY-radius, radius, M_PI/2, M_PI, 0);
CGContextAddArc(context, minX+radius, minY+radius, radius, M_PI, M_PI+M_PI/2, 0);
// Close the path
CGContextClosePath(context);              

CGContextSaveGState(context);
CGContextClip(context);
CGContextDrawLinearGradient(context, gradient, CGPointMake(minX,minY), CGPointMake(minX,maxY), kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation);
CGContextRestoreGState(context);

}

+2
source

Source: https://habr.com/ru/post/1796729/


All Articles