Four point gradient in iOS

后端 未结 2 1612
别那么骄傲
别那么骄傲 2020-12-14 12:32

I am planing to create a four point gradient, pictured below, by drawing two linear gradients via core graphics and masking between them with a third black and white linear

相关标签:
2条回答
  • 2020-12-14 12:41

    You can save the mask gradient when you use a CGBlendMode. It's just harder to control the exact colors. But if that's not important for you, it could be a little more efficient in terms of lines of code and maybe also in terms of performance.

    Here's an example with some random colors and CGBlendModeExclusion (CGBlendModeDifference gives you a similar effect)

    - (void) drawRect:(CGRect)rect
    {
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        CGContextSetBlendMode(ctx, kCGBlendModeExclusion);
        CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
    
        CGFloat col1[8] = {
            1.0, 0.0, 0.0, 1.0,
            0.0, 0.0, 1.0, 1.0
        };
        CGGradientRef grad1 = CGGradientCreateWithColorComponents (space, col1, NULL, 2);
        CGContextDrawLinearGradient(ctx, grad1, CGPointMake(0, 0), CGPointMake(0, 320), 0);
    
    
        CGFloat col2[8] = {
            1.0, 0.5, 0.0, 1.0,
            0.0, 1.0, 0.0, 1.0
        };
        CGGradientRef grad2 = CGGradientCreateWithColorComponents (space, col2, NULL, 2);
        CGContextDrawLinearGradient(ctx, grad2, CGPointMake(0, 0), CGPointMake(320, 0), 0);
    
        CGGradientRelease(grad1);
        CGGradientRelease(grad2);
        CGColorSpaceRelease(space);
    }
    
    0 讨论(0)
  • 2020-12-14 12:53

    Draw four circles:

    Circles

    Apply radial transparent gradient:

    Gradient

    Result:

    Result

    Notes:

    • The gray lines represent the bitmap size.
    • The diameter of the circles is twice the bitmap diameter.
    • Each circle is centered at one of the bitmap corner.
    • Effectively only the center part is drawn.
    • The remaining parts are outside the bitmap.
    0 讨论(0)
提交回复
热议问题