Как создать градиентную заливку UIBezierPath? - PullRequest
4 голосов
/ 12 февраля 2012

Я хотел бы создать UIBezierPath с закругленными углами 10px и градиентной заливкой.Как я могу добиться этого эффекта?

Вот изображение того, что я хочу сделать:

enter image description here

Как видите, этот квадрат имеет:

  • 2px черная рамка
  • 10px закругленные углы
  • линейный градиент от красного до зеленого

Как я могу сделать это программно без использованияцвет рисунка ?

Вот как я создаю путь:

UIBezierPath *border = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:10.0f];
[border setLineWidth:2];
[[UIColor blackColor] setStroke];
[border stroke];
[[UIColor redColor] setFill]; <-- what should I put here?
[border fill];

1 Ответ

4 голосов
/ 12 февраля 2012

3 способа, которые я могу придумать.

  1. Создайте CAGradientLayer и вставьте его в качестве подслоя theView.layer.Вы даже можете поместить радиус закругленного угла на слой.Конечно, вам придется импортировать платформу QuartzCore.

  2. Сделайте это с CoreGraphics, например, так:

    CGGradientRef gradient;
    CGColorSpaceRef colorspace;
    size_t num_locations = 2;
    CGFloat locations[2] = { 0.0, 1.0 };
    CGFloat components[8] = { 1.0, 0.0, 0.0, 1.0,  // Start color
            0.0, 1.0, 0.0, 1.0 }; // End color
    
    colorspace = CGColorSpaceCreateDeviceRGB();
    gradient = CGGradientCreateWithColorComponents (colorspace, components, locations, num_locations);
    CGContextDrawLinearGradient (ctx, gradient, gradientStartPoint, gradientEndPoint, 0);
    CGGradientRelease(gradient);
    
  3. Создать оффконтекст изображения экрана шириной в один пиксель с градиентом, создайте изображение, а затем установите цвет фона с помощью colorWithPatternImage.

Это в порядке от самого простого к сложному.

...