寫此文章謹此紀念折磨我近六小時的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;