【问题标题】:How do i do drawrect type stuff outside of drawrect?我如何在drawrect之外做drawrect类型的东西?
【发布时间】:2011-05-18 19:23:30
【问题描述】:

我有一个名为 Icon 的基于 UIView 的类。在那里,我想有类似这样的代码:

UIView *finalView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
finalView.backgroundColor = [UIColor redColor];

UIGraphicsBeginImageContext(finalView.bounds.size);
[finalView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

问题是,我不想将它放在 drawRect 中,因为当我的应用程序在另一个视图中创建每个图标时会调用它。我怎样才能将这种代码放在我的 Icon 类的其他地方?我试着把它放在一个地方,它给了我:

CGContextSaveGState: invalid context 0x0
CGContextSetAlpha: invalid context 0x0
CGContextSaveGState: invalid context 0x0
CGContextSetFillColorWithColor: invalid context 0x0
CGContextAddRect: invalid context 0x0
CGContextDrawPath: invalid context 0x0
CGContextRestoreGState: invalid context 0x0
CGContextRestoreGState: invalid context 0x0

【问题讨论】:

  • 我明白了,你想渲染一次,然后显示结果?
  • 是的,我想先显示视图,然后再将其更改为不同的视图。
  • 如果将上下文放入变量CGContextRef currCtx = UIGraphicsGetCurrentContext();NSLog 它会得到什么?
  • 所以,您还没有成功创建上下文。 finalView.bounds.size 的值是多少?

标签: iphone objective-c ios graphics core-graphics


【解决方案1】:

继续在-drawRect: 中进行所有绘图。当某些事情发生变化并且您希望重新绘制视图时,请向其发送 -setNeedsDisplay-setNeedsDisplayInRect: 消息。

【讨论】:

    【解决方案2】:

    确保图像上下文的尺寸不无效。例如,如果它们是 {0,0},那么您将获得一个 NULL 响应来创建上下文,并且所有需要有效位图上下文的调用都会告诉您 0x0 不是有效的上下文。

    【讨论】:

      【解决方案3】:

      也许您正在寻找 UIGraphicsPushContext(context)?你可以让你的图像上下文是最新的,以便在 UIKit 可用的任何地方绘制它。绘图后不要忘记 UIGraphicsPopContext()。

      【讨论】:

        【解决方案4】:

        把它放在 initWithFrame: 中怎么样?这对你有用吗?

        【讨论】:

        • 不行,我先放同样的错误,放后没有结果。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多