Core Graphics,如何绘制带有椭圆透明孔的矩形?

2023-12-03

我正在尝试绘制一个被椭圆挖空的 320x480 矩形。 想象一下绘制一个填充的矩形,在矩形上绘制一个填充的椭圆,然后从矩形中删除椭圆,留下一个透明的孔。

- (void)drawRect:(CGRect)rect
{
        // Drawing code.
    CGContextRef context = UIGraphicsGetCurrentContext();
    // Set color to red
    CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);
    // Add rectange
    CGContextAddRect(context, rect);
    // Fill rectange
    CGContextFillRect(context, rect);

    // Create a elipse to be removed from rectange

    CGPathRef circlePath = CGPathCreateMutable();       
    CGPathAddEllipseInRect(circlePath , NULL , elipseRect);

    CGContextAddPath(context, circlePath);  
    CGContextSetRGBFillColor(context, 1.0, 1.0, 0.0, 1.0);
    CGContextFillPath(context);

    // clip elipse... (DO NOT WORK)
    CGContextEOClip(context);
}

当我尝试从矩形中删除日食时,它不起作用。

有人有解决办法吗?


这超出了我的想象,但是...

CGPathRef cutoutRect = CGPathCreateMutable();       
CGPathAddRect(cutoutRect, NULL, rect);
CGPathAddEllipseInRect(cutoutRect, NULL, ellipseRect);

CGContextAddPath(context, cutoutRect);  
CGContextSetRGBFillColor(context, 1.0, 1.0, 0.0, 1.0);
CGContextFillPath(context);

您实际上可能需要使用CGContextEOFillPath,我永远不能保持笔直. The CGContextClip应该使用 -type 函数before绘制而不是之后,但在这种情况下它们可能没有必要。

也就是说,你不应该在-drawRect:实现,但路径应该设置在CAShapeLayer这是该视图的子层,或其唯一层,或者实际上,如果可能的话,可以代替该视图使用的层。

另请注意,矩形传入drawRect:可能只是整个视图的一部分,因此您的代码将按原样产生一些非常奇怪的结果。你的意思self.bounds?

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

Core Graphics,如何绘制带有椭圆透明孔的矩形? 的相关文章

随机推荐

  • 如何在 MATLAB 中合并这些数据?

    在下面的示例文本文件中 如果第 3 列包含1那么第 2 列对应的数据应该与第 2 列中前一行的数据合并 例如 40第 2 行中应添加到10在第 1 行中 则第 2 行应设置为0 如修改后的示例文本文件所示 我下面的代码的问题是它只记录当前数
  • MongoDB GridFS 对于相对较小的文件来说文件大小很大

    我正在做一些测试 看看我们是否可以在 MongoDB 上使用 GridFS 来存储未来应用程序的文件 我正在使用 10gen 的 C 驱动程序将 80Mb 文件 上传 到数据库中 第一次添加效果很好 大约花费了 3 秒 这在我的测试机上还算
  • Notepad++:在某些字符串匹配后插入空白新行

    我想在之后插入新行 4 notepad 中整个文档的选项 由于他涉嫌参与间谍 1 abc 2 自卫队 3 阿斯夫 4 聚合 当校长进来时班级里 所有的朋友都静静地 1 dfg 2 高中生 3 可持续发展目标 4 现场环境 下面的表达式不起作
  • string.charAt(x) 还是 string[x]?

    我有什么理由应该使用string charAt x 而不是括号符号string x 括号表示法现在适用于所有主要浏览器 IE7 及更低版本除外 Bracket Notation Test String1 6 charAt Implement
  • 改造和 orm 库抛出 StackOverflow

    我尝试使用 2 个库 square Retrofit 休息客户端 萨蒂亚 糖 db orm retrofit use gson 类也如此 public class Book String name public Book String na
  • JQuery 查找 img src

    使用 JQuery 我希望能够获得 img src 链接 tbody tr td 160 img src https this link here com width 26 height 24 alt border 0 td 我努力了 va
  • 如何删除开发人员工作区

    一名开发人员离开了 他的工作站现已格式化 TFS 认为他仍然检出文件 显然他永远不会签入它们 我如何告诉 TFS 忘记它 如何 撤消其他用户的签出 如何 删除工作区
  • 以编程方式进行 gridview 编辑模式

    我有一个基本的 gridview 我将 SQL 存储过程的代码后面的数据绑定到该视图
  • 函数前面的分号是什么意思? [复制]

    这个问题在这里已经有答案了 我正在查看一个开源项目 并看到类似这样的内容 function codes here 我想知道那里的分号是否有特殊含义 这是因为 ASI 自动分号插入 允许您避免使用分号 例如 您可以编写这样的代码 不会出现错误
  • 使用JQuery访问另一个文件中一个文件的js变量

    我有 2 个 js 文件 1 js 和 2 js 在 1 js 中我有一个变量 var test Hello 我正在尝试访问 2 js 中的变量 alert test 示例代码 1 js document ready function va
  • 如何调用角度数据表的销毁函数?

    我有一个控制器 我想在控制器中的 watch 方法中调用 Jquery Datatables 的 destroy 函数 scope watch model SelectedWaiver function if scope model Sel
  • React Native:语法错误:严格模式不允许在词法嵌套语句中声明函数

    从 React Native 0 22 2 升级并升级一些插件后 我开始在 iOS 上遇到此错误 我尝试过降级并重新安装所有内容 但无法修复它 其他人也遇到过这种情况 SyntaxError Strict mode does not all
  • 检测其他按钮单击(NSUserNotification)

    我在互联网上进行了搜索 但找到的唯一方法是循环 void userNotificationCenter NSUserNotificationCenter center didDeliverNotification NSUserNotific
  • 获取 Windows CE 5.0 设备的电池信息

    先生 我正在为运行 WINDOWS CE 5 0 的设备开发一个应用程序 我想知道设备的电池 电源信息 我对 CE 编程完全陌生 请问windows mobile编程和CE编程有什么区别吗 我找到了可以使用的 MICROSOFT WINDO
  • 生成一定范围内的 N 个随机且唯一的数字

    使用 C 在给定范围内生成 N 个唯一数字的有效方法是什么 例如 生成 1 到 50 之间的 6 个唯一数字 一种懒惰的方法是简单地使用Random Next 循环并将该数字存储在数组 列表中 然后重复并检查它是否已经存在等 是否有更好的方
  • facebook->getUser() 返回 0

    每当我尝试登录时 都会出现提示 询问基本权限 之后它会使用 URL 重定向到我的redirect uri gt http localhost demo code AQDwzia3Wx1BktixF59jVHbm0ViGVJm8Xhb2tNZ
  • 在 MATLAB 中绘制椭圆

    对于椭圆的参数方程 其样式如下 或者可以写成矩阵形式 现在我想通过系数矩阵来绘制它 a b c d e f 在MATLAB中 Method 1 plot function drawEllipse1 mat t linspace 0 2 pi
  • 使用 2 个消费者配置时消费者吞吐量缓慢

    使用 spring integration kafka 扩展和以下配置
  • git post-receive 之后更改所有权

    我有以下设置 两个用户 example 和 git Inside home git repositories project git hooks post receive我要结账 home example public html dev 因
  • Core Graphics,如何绘制带有椭圆透明孔的矩形?

    我正在尝试绘制一个被椭圆挖空的 320x480 矩形 想象一下绘制一个填充的矩形 在矩形上绘制一个填充的椭圆 然后从矩形中删除椭圆 留下一个透明的孔 void drawRect CGRect rect Drawing code CGCont