如何创建 UIBezierPath 渐变填充?

发布于 2025-01-04 23:59:26 字数 580 浏览 1 评论 0原文

我想创建一个带有 10px 圆角和渐变填充的 UIBezierPath 。我怎样才能达到这个效果?

这是我想要做的事情的图像:

在此处输入图像描述

如您所见,这个正方形有:

  • 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];

I would like to create a UIBezierPath with 10px rounded corners and with gradient fill. How can I acheive this effect?

Here's an image of what I want to do:

enter image description here

As you can see, this square has:

  • 2px black border
  • 10px rounded corners
  • red to green linear gradient fill

How can I do this programatically without using pattern image color?

Here's how I create the path:

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];

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

囍笑 2025-01-11 23:59:26

我能想到的3种方法。

  1. 创建一个 CAGradientLayer 并将其作为 theView.layer 的子图层插入。您甚至可以在图层上放置圆角半径。当然,您必须导入 QuartzCore 框架。

  2. 使用 CoreGraphics 进行操作,如下所示:

    CGGradientRef 渐变;
    CGColorSpaceRef 色彩空间;
    size_t num_locations = 2;
    CGFloat 位置[2] = { 0.0, 1.0 };
    CGFloat Components[8] = { 1.0, 0.0, 0.0, 1.0, // 起始颜色
            0.0, 1.0, 0.0, 1.0 }; // 结束颜色
    
    色彩空间 = CGColorSpaceCreateDeviceRGB();
    渐变= CGGradientCreateWithColorComponents(颜色空间,组件,位置,num_locations);
    CGContextDrawLinearGradient(ctx, 渐变, 渐变起始点, 渐变结束点, 0);
    CGGradientRelease(渐变);
    
  3. 创建一个一像素宽且具有渐变的离屏图像上下文,生成图像,然后使用 colorWithPatternImage 设置背景颜色。

这些按从最简单到最难的顺序排列。

3 ways that I can think of.

  1. Create a CAGradientLayer and insert it as a sublayer of theView.layer. You can even put a rounded corner radius on the layer. Of course you'll have to import QuartzCore framework.

  2. Do it with CoreGraphics, like so:

    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. Create an off-screen image context that's one pixel wide and has a gradient, generate the image, then set the background color with colorWithPatternImage.

These are in order of easiest to hardest.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文