如何在 iOS 中用渐变填充由 CGPoints 定义的形状?

2024-01-12

我在代码中设置了自定义形状的箭头。我想做的就是用渐变填充它。问题是,我不知道如何用渐变填充非矩形形状(暗框内的空间)。有任何想法吗?

 //Define colours used in drawing
CGContextRef context = UIGraphicsGetCurrentContext();

CGColorRef lightColor = _lightColor.CGColor;
CGColorRef darkColor = _darkColor.CGColor;
CGColorRef shadowColor = [UIColor colorWithRed:0.2 green:0.2 
                                          blue:0.2 alpha:0.5].CGColor;   

//Get label text size to help determine sizes for drawing
CGSize textSize = [[_titleLabel text] sizeWithFont:[_titleLabel font]];

//Set shadow
CGContextSaveGState(context);
CGContextSetShadowWithColor(context, CGSizeMake(0, 2), 3.0, shadowColor);

//Set arrow shape
CGPoint rectangle_points[] =
{
    CGPointMake(_coloredBoxRect.origin.x, _coloredBoxRect.origin.y),
    CGPointMake(textSize.width+10, _coloredBoxRect.origin.y),
    CGPointMake(textSize.width+40, _coloredBoxRect.origin.y+20),
    CGPointMake(textSize.width+10, _coloredBoxRect.origin.y+40),
    CGPointMake(_coloredBoxRect.origin.x, _coloredBoxRect.origin.y+40),
    CGPointMake(_coloredBoxRect.origin.x, _coloredBoxRect.origin.y),
};
CGContextAddLines(context, rectangle_points, 6);    
CGContextSetFillColorWithColor(context, lightColor);
CGContextFillPath(context);

CGContextRestoreGState(context);

//Draw dark frame for the arrow
CGContextSetStrokeColorWithColor(context, darkColor);
CGContextSetLineWidth(context, 1.0);  
CGContextSaveGState(context);
draw1PxStroke(context, CGPointMake(_coloredBoxRect.origin.x, _coloredBoxRect.origin.y), CGPointMake(textSize.width+10, _coloredBoxRect.origin.y), darkColor);
draw1PxStroke(context, CGPointMake(textSize.width+10, _coloredBoxRect.origin.y+40), CGPointMake(_coloredBoxRect.origin.x, _coloredBoxRect.origin.y+40), darkColor);
draw1PxStroke(context, CGPointMake(_coloredBoxRect.origin.x, _coloredBoxRect.origin.y), CGPointMake(_coloredBoxRect.origin.x, _coloredBoxRect.origin.y+40), darkColor);
draw1PxStroke(context, CGPointMake(textSize.width+10, _coloredBoxRect.origin.y), CGPointMake(textSize.width+40, _coloredBoxRect.origin.y+20), darkColor);
draw1PxStroke(context, CGPointMake(textSize.width+10, _coloredBoxRect.origin.y+40), CGPointMake(textSize.width+40, _coloredBoxRect.origin.y+20), darkColor);    
CGContextRestoreGState(context);

查看这个苹果示例应用程序。 它正是您在“多边形”部分中所需要的(用于填充多边形)。 您需要更改的是绘制渐变而不是像示例中那样绘制。 示例中的“渐变”部分还举例说明了绘制渐变。

http://developer.apple.com/library/ios/#samplecode/QuartzDemo/Introduction/Intro.html http://developer.apple.com/library/ios/#samplecode/QuartzDemo/Introduction/Intro.html

希望这可以帮助, 弗拉德

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 iOS 中用渐变填充由 CGPoints 定义的形状? 的相关文章

随机推荐

  • 系统表master..spt_values的用途是什么?其值的含义是什么?

    系统表master spt values的目的是什么 为什么提供它以及应该如何使用它 它的类型 低值 高值的含义是什么 Update 谷歌搜索给出了数千个 其用途 例如 使用 master spt values 拆分列 https stac
  • 按近时间对数据行进行分组

    这是我面临的问题 我有一个包含行的大表 我想按接近的时间对它们进行分组 更具体地说是时间差小于 2 分钟 示例如下 具有以下输入数据 16 01 01 乙 16 01 20 中 16 14 02 日 16 15 01 下午 16 20 02
  • 确保按顺序处置多个 IDisposable

    我有两个IDisposables我需要按顺序处理 从第一次开始 顺序就很重要IDisposable终止依赖于将被第二个终止的服务的 Rx 订阅IDisposable 这是在 Windows 窗体应用程序中 其中订阅IObservable需要
  • Javascript 清除字段功能不起作用?

    这是我为明文字段创建的函数 但是当输入任何自定义值时 它不会清除 function clear document getElementById bmw1 value document getElementById bmw2 value do
  • 构建容器时如何制作纱线缓存模块?

    这是我的Dockerfile为当地发展 FROM node 12 alpine WORKDIR usr app ENV DEV 1 COPY package json COPY yarn lock RUN yarn frozen lockf
  • 当父进程被杀死时,子进程也被杀死

    我正在使用创建新流程System Diagnostics Process我的应用程序中的类 我希望当 如果我的应用程序崩溃时杀死这个进程 但是 如果我从任务管理器终止我的应用程序 子进程不会被终止 有没有办法让子进程依赖于父进程 From
  • 在 MSBuild 中找出当前操作系统的“位”

    我有一个构建脚本 需要对可执行文件的路径进行硬编码 路径是 C Program Files Microsoft Visual Studio 9 0 SmartDevices SDK SDKTools cabwiz exe 这工作得很好 但现
  • 如何执行 Bash 命令并收集 Java 的输出?

    如何执行 Bash 命令并收集 Java 的输出 大家好 基本上我正在编写一个基本的控制台应用程序 并且希望能够从中运行命令 例如 sudo halt ifconfig 等 有什么见解吗 您可以使用流程构建器 http download o
  • 使用 Lazy 是否会降低性能?

    最近 我遇到了一个单例类的问题 该类延迟初始化字典 其中第二个线程会在实际填充字典之前尝试使用它 所以我通过以下方式实现了变量初始化Lazy
  • Gandi.net 和 Heroku 域路由

    我的 io 域适用于 www domain io 但不适用于 domain io 版本 以下是我尝试过的每个版本和修订版 每个版本和修订版之间都有充足的时间 我等 10800 IN A 174 129 212 2 10800 IN A 75
  • subprocess.check_output():失败时显示输出

    的输出subprocess check output 目前看起来像这样 CalledProcessError Command foo returned non zero exit status 1 有没有办法获得更好的错误消息 我想看看st
  • 在哪里可以学习 DirectX 编程? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想学习 C 编程中的 DirectX 我决定学习DirectX 于是在网上找了一些教程 但是都是very复杂且难以理解 我花了3天时间看
  • .cc 和 .cpp 文件后缀有什么区别?

    有什么区别 cc and cpp文件扩展名 从Google 我了解到它们都来自C 语言 但我不确定它们之间的区别 惯例 从历史上看 C 源文件的后缀是 C 这在第一次移植 C 时引起了一些问题 对于文件名中大小写不重要的系统 不同的用户采用
  • 如何在 Substrate 的智能合约平台 ink 上保存字符串值?

    我最初尝试了这个问题中所教授的实现 如何在 Substrate 上保存字符串值 https stackoverflow com questions 63221904 how can i save string value on substr
  • 如何通过 rmarkdown 自动将 networkD3::sankeyNetwork() 保存到静态图像中?

    当我在 rmarkdown 中编写报告时 我的所有数据都会自动保存在该文件夹下graphs 然而 由于桑基图不同 它不会自动保存为图片 png 等 有解决方法吗 无需通过 RStudio Plots 面板手动保存每个图表 I saw 这个问
  • 如何在 Kotlin 中打印 ClosedRange

    我正在学习 Kotlin 并且我正在尝试理解Ranges 我创建了一系列String如下 val alpha A Z 我想打印我写的这个 for item in alpha println item 但它给出了错误 错误 13 18 Kot
  • 什么时候工厂方法比简单工厂更好,反之亦然?

    我正在阅读 Head First Design Patterns 一书 我相信我了解简单工厂和工厂方法 但我很难看出工厂方法相对于简单工厂带来的优势 如果对象 A 使用简单工厂来创建其 B 对象 那么客户端可以这样创建它 A a new A
  • 到 Out-GridView 和 Out-File 的管道有不同的行?

    以下命令仅返回一行 参数 Context 10被忽略 select string path file txt pattern Context 10 Out GridView 但是 以下命令创建一个包含所有行的文件 select string
  • logback 在 Flink 中不起作用

    我有一个单节点 Flink 实例 它在 lib 文件夹中具有 logback 所需的 jar logback classic jar logback core jar log4j over slf4j jar 我已从 lib 文件夹中删除了
  • 如何在 iOS 中用渐变填充由 CGPoints 定义的形状?

    我在代码中设置了自定义形状的箭头 我想做的就是用渐变填充它 问题是 我不知道如何用渐变填充非矩形形状 暗框内的空间 有任何想法吗 Define colours used in drawing CGContextRef context UIG