【问题标题】:Core Graphics Error核心图形错误
【发布时间】:2013-07-11 00:10:12
【问题描述】:

当我在自定义 UIView 子类中调用 DrawRect 时出现以下错误:

CGContextFillRects: invalid context 0x0

我的 UIView 子类 'EVGameView' 中的 DrawRect 方法实现如下:

- (void)drawRect:(CGRect)rect
{
    CGRect rectangle = CGRectMake(0, 100, 320, 100);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 1.0);
    CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0);
    CGContextFillRect(context, rectangle);
}

然后我在 viewController 'viewDidLoadMethod' 中实例化我的 EVGameView 类:

- (void)viewDidLoad
{
    srand(time(0));

    [super viewDidLoad];

    gameBoard = [[EVBoard alloc] init];
    [gameBoard initBoard:10 : 10 : mainBoard];

    gameView = [[EVGameView alloc] init];          // EVGameView instance

            .
            .
            .

}

我在下面的方法中调用drawRect方法:

- (void)drawStartPosition
{
    CGRect rect;
    rect.origin = startPos;
    rect.size.width = 10;
    rect.size.height = 10;
    [gameView drawRect: rect];
}

似乎没有设置上下文,因为 UIGraphicsGetCurrentContext() 返回“nil”。我在 youTube 上看到过一些例子,人们有一个相同的 drawRect 方法,而且效果很好。我在 .xib 文件中设置了一个单独的视图并将其链接到我的 gameView 实例,但仍然没有运气。 非常感谢您提供任何帮助!

谢谢-

【问题讨论】:

    标签: iphone ios objective-c core-graphics


    【解决方案1】:

    你没有说你打电话给drawStartPosition,但这就是问题所在。基本上,您不应自己调用drawRect:,而应调用setNeedsDisplay 并允许系统在实际要求您的视图将自己绘制到提供的上下文中之前完成所有适当的设置。

    【讨论】:

    • 好的。谢谢,它有效!我从视图控制器中的另一个方法调用 drawStartPosition。如果我需要传递一个 CGRect,setNeedsDisplayInRect 会起作用吗?
    • setNeedsDisplayInRect 只会将传递的矩形渲染到屏幕上。
    • 很抱歉再次打扰你,但是当我最初调用'setNeedsDisplay'时,每次都调用'drawRect',因为我在这里设置了一个断点。现在当我调用以前的 drawRect 时不再调用。我所做的唯一重大更改是在我的 UIView 子类接口中添加一个指向包含 CGRect 的对象的指针。听说过这样的事吗?非常感谢您提供的任何帮助!
    • 没有。很可能您无意中释放了视图(或您对它的引用)或传递了要绘制的零帧或无效帧。
    • 我发现了问题——我在 viewDidLoad 中声明了我的 UIView 子类的一个实例。当我把它拿出来时,它起作用了。我想使用实例方法 (-),例如 drawRect,必须声明一个实际实例。现在只需一个指向视图的指针,它就可以正常工作。感谢您的所有帮助。
    猜你喜欢
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多