写此文章谨此纪念折磨我近六小时的Bug。。。
昨天无意看到xcode控制台在打印警告Log。本着一句:没有洁癖的程序员不是好的程序员,我就想把它给消灭掉(不曾想折麽了我近六小时o.o)。
控制台的Log
CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
<Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
CGContextSetBlendMode: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
CGContextSetBlendMode: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
在网上看到好多关于CGContextSaveGState
报错的问题如下几点:
1、关于statusBar的问题 样式的问题。
2、关于绘图没有在drawRect中进行的。
(以上俩点都可以度娘得到解决办法)。
重点来了
在我的工程中
一、没有做绘图。
二、更没有修改状态栏。
笔者今天头痛也是语无论次的、寻找问题原因的经过就不写了。下面直接说我的原因和解决办法吧
原因、方法
我写聊天背景气泡、对图片拉伸的时候出了问题如下:
我获取到图片的宽高:(20,20);
在设置UIEdgeInsetsMake(16 ,7, 3, 13);把左右的拉伸边缘设置刚好是7 + 13 = 20了。 也就是左右拉伸的区域设置为0了。
关于图片拉伸的知识大家自行度娘补充
故就有了绘图出错 获取不到上下文的问题了(不明白为什么左右为零了 图片还能正常拉伸)
解决办法当然就是UIEdgeInsetsMake(16 ,6, 3, 13);左右拉伸的区域留一像素点就好啦。
UIImage * rightBubble = [UIImage imageNamed:@"message_sender_background_normal"];
// UIEdgeInsets edgeInsets = UIEdgeInsetsMake(16 ,7, 3, 13);
UIEdgeInsets edgeInsets = UIEdgeInsetsMake(16 ,6, 3, 13);
UIImage *img = [rightBubble resizableImageWithCapInsets:edgeInsets resizingMode:UIImageResizingModeTile];
self.messageBackgroundImageView.image = img;