博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
绘图UIGraphicsGetCurrentContext返回为空?
阅读量:6670 次
发布时间:2019-06-25

本文共 927 字,大约阅读时间需要 3 分钟。

hot3.png

如果想绘制一个矩形,直接将一下代码拷贝到ViewDidLoad中是无效的:

// Drawing a rect

    CGRect rectangle = CGRectMake(10, 10, 120, 25);

   CGContextRef ctx = UIGraphicsGetCurrentContext();

    

    UIGraphicsPushContext(ctx);

CGContextAddRect(ctx, rectangle);

CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);

CGContextFillPath(ctx);

调试发现UIGraphicsGetCurrentContext()函数返回为nil

【按照文档中的说法,系统会维护一个CGContextRef的栈,而UIGraphicsGetCurrentContext()会取栈顶的CGContextRef,

正确的做法是只在drawRect里调用UIGraphicsGetCurrentContext(),

因为在drawRect之前,系统会往栈里面压入一个valid的CGContextRef,

除非自己去维护一个CGContextRef,否则不应该在其他地方取CGContextRef。】

根据以上分析,正确做法:

1、自定义一个类MyView,UIView的子类

2、重写该类的方法

- (void)drawRect:(CGRect)rect

3、将绘制图形的代码拷贝到drawRect方法中

4、在ViewController中的ViewDidLoad中添加该视图,代码如下:

MyView *myview = [[MyView alloc]initWithFrame:self.view.frame];

[self.view addSubview:myview];

5、运行后,界面上出现红色矩形!

其中,不需要导入framework,默认框架已经引入了CoreGraphics.framework

转载于:https://my.oschina.net/u/1174027/blog/187091

你可能感兴趣的文章
赢在起跑点半途就退场,锂电池先行者企业黯然离席
查看>>
手把手教你启用RemoteFX以及Hyper-V GPU卸载
查看>>
《交互式程序设计 第2版》一3.10 更进一步
查看>>
液晶拼接屏的专业术语有哪些
查看>>
微博悄然取消140字限制 面向全体用户
查看>>
OA系统软件怎么选型?
查看>>
英伟达发布Tesla P4&P40两款基于Pascal架构的深度学习芯片
查看>>
《Web应用漏洞侦测与防御:揭秘鲜为人知的攻击手段和防御技术》——1.5 Web Worker...
查看>>
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.10 UDP程序例子小结
查看>>
拯救 Firefox !
查看>>
《人工智能:计算Agent基础》——2.2 Agent系统
查看>>
Firefox 53 Beta 引入两个新 “Compact” 主题
查看>>
英特尔增强 Android 安全 提高自家芯片吸引力
查看>>
《腾讯iOS测试实践》一一1.2 工程效率
查看>>
《Photoshop Lightroom4 经典教程》—第1课1.1节了解Lightroom的工作方式
查看>>
《数据科学:R语言实现》——第2章 数据抽取、转换和加载
查看>>
《深入理解Spark:核心思想与源码分析》——3.7节创建和启动DAGScheduler
查看>>
《ANSYS Workbench有限元分析实例详解(静力学)》——2.5 Windows界面相应操作
查看>>
《R与Hadoop大数据分析实战》一1.7 Hadoop的子项目
查看>>
Google Web Designer 开始支持 Linux
查看>>