为什么我无法在 UIView 上绘制内容?

发布于 2024-08-22 04:54:00 字数 522 浏览 5 评论 0原文

这是我的主视图,我只是想让它画一些东西来测试,但我发现我的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上?

This is my Main View, I just want it draw some thing to test, but I find that my UI don't have any thing, here is the code:

- (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);


}

This is the sample code I copied online. I assume the code is correct, it does not have any error, but nothing appear. Or... ... this code should not paste on viewDidLoad?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

尐偏执 2024-08-29 04:54:00

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)或者以编程方式创建了视图?

viewDidLoad doesn't have a context. You will need to create an image context, do your drawing, produce an image, then add it to the view like so:

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];

Edit:
viewDidLoad is a UIViewController method, not a UIView method. I assume this code is in your controller, am I correct? Also, viewDidLoad is only called after loading a view from a nib. Did you use a nib (xib built with Interface Builder) or did you create your view programmatically?

甜是你 2024-08-29 04:54:00

要使用代码在视图上绘图,您需要重写 -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);


}

To draw on the view using your code, you need to override -drawRect: instead of -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);


}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文