2010-07-15 79 views
0

我不是試圖畫一個組件,我只是試圖創建一個新的上下文(我認爲),並吐出一個UIImage與我的繪圖的內容。我沒有試圖利用任何現有的組件。我正在使用以下代碼:iphone繪畫背景

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
CGContextRef context = CGBitmapContextCreate(NULL, self.textSize.width, self.textSize.height, 8, 4 * self.textSize.width, 
              colorSpace, kCGImageAlphaPremultipliedFirst); 
CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 1); 
NSString *text = @"Hello world"; 
[text drawAtPoint:CGPointMake(0, 0) forWidth:maxWidth withFont:font lineBreakMode:UILineBreakModeWordWrap]; 

CGImageRef imageMasked = CGBitmapContextCreateImage(context); 
CGContextRelease(context); 
CGColorSpaceRelease(colorSpace); 

UIImage * myRendering = [UIImage imageWithCGImage:imageMasked]; 

不幸的是,我收到「無效的上下文」錯誤消息。搜索Google似乎只會引起人們試圖利用現有組件。我想吐出一個新的UIImage。

我想這裏的例子創建位圖背景 - http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_context/dq_context.html#//apple_ref/doc/uid/TP30001066-CH203-SW9

我仍然得到:

:CGContextGetShouldSmoothFonts:無效的情況下 :CGContextSetFont:無效的情況下 :CGContextSetTextMatrix:無效的情況下 :CGContextSetFontSize:無效背景 等...

回答

-2

好,所以問題是我沒有把我的位圖繪製代碼放在viewDidLoad中。我真的不明白這個東西。爲什麼這很不直觀?

0

你總是繪製一個上下文。上下文本身可以鏈接到顯示,位圖甚至PDF。

根據你想達到什麼,你必須創建一個上下文或使用現有的上下文。對於自定義組件(我認爲你的意思是因爲你提到了一個JPanel),你只需像這樣覆蓋UIView的drawRect方法即可。

- (void)drawRect:(CGRect)rect { 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 

正如你所看到的背景下已經爲您創建並通過調用UIGraphicsGetCurrentContext()得到它。

+0

我只想繪製一個no context並返回一個我的繪圖的UIImage ...可以這樣做嗎? – 2010-07-15 23:13:59

+0

所以無論如何這裏複製的代碼:http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_context/dq_context.html#//apple_ref/doc/uid/TP30001066-CH203-SW9 看不到我怎麼能得到它錯了 - 仍然得到: 週五7月16日10時04分52秒MitchMac.local年鑑[75297] :CGContextGetShouldSmoothFonts:無效的情況下 – 2010-07-16 00:07:45

0

首先,通過檢查返回值CGBitmapContextCreate來檢查是否實際創建了上下文。即

if (context == NULL) NSLog(@"glad I always check my return values!"); 

然後檢查控制檯是否有任何消息。

如果您還沒有創建上下文,請檢查您是否在iOS 4.0或更高版本上開發。如果不是,不要傳遞NULL作爲第一個參數,但是malloc是內存的一部分。

+0

因此iPad i3.2將與NULL的工作權利。 – 2010-07-17 12:50:41

+0

誰在乎,只需檢查返回值然後調試。而不是相反。 (不,我不認爲'3.2> = 4.0',但我會檢查我的數學) – mvds 2010-07-17 14:45:37