为什么我不能在我的UIView上画东西?

时间:2010-02-19 17:36:26

标签: iphone quartz-graphics

这是我的主视图,我只想绘制一些东西进行测试,但我发现我的UI没有任何东西,这里是代码:

- (void)viewDidLoad {
    [super viewDidLoad];

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 2.0); 
    CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor); 
    CGContextMoveToPoint(context, 100.0f, 100.0f); 
    CGContextAddLineToPoint(context, 200.0f, 200.0f); 
    CGContextStrokePath(context);


}

这是我在线复制的示例代码。我假设代码是正确的,它没有任何错误,但没有出现。或者......这段代码不应该粘贴在viewDidLoad上?

2 个答案:

答案 0 :(得分:4)

viewDidLoad没有上下文。您需要创建图像上下文,绘制图像,生成图像,然后将其添加到视图中,如下所示:

UIGraphicsBeginImageContext();
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2.0); 
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor); 
CGContextMoveToPoint(context, 100.0f, 100.0f); 
CGContextAddLineToPoint(context, 200.0f, 200.0f); 
CGContextStrokePath(context);
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIImageView *imgView = [[UIImageView alloc] initWithImage:img];
[self.view addSubview:imgView];
[imgView release];

编辑: viewDidLoad是一个UIViewController方法,而不是UIView方法。我假设这个代码在你的控制器中,我是否正确?此外,viewDidLoad仅在从nib加载视图后调用。您是否使用了nib(使用Interface Builder构建的xib)或者是否以编程方式创建了视图?

答案 1 :(得分:1)

要使用您的代码在视图上绘图,您需要覆盖-drawRect:而不是-viewDidLoad

- (void)drawRect:(CGRect)rect {
    [super drawRect:rect]; // not necessary

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 2.0); 
    CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor); 
    CGContextMoveToPoint(context, 100.0f, 100.0f); 
    CGContextAddLineToPoint(context, 200.0f, 200.0f); 
    CGContextStrokePath(context);


}