2010-07-15 78 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