Core Graphics关于上下文的问题。 CGContextFillRects:无效的上下文0xa88a500

时间:2012-11-20 08:50:29

标签: ios5 core-graphics quartz-graphics cgcontext

通常当您在无效的上下文中绘制时,您会看到类似无效的上下文0x00,但事实并非如此,因为我看到了一个地址。我的所有Core Graphics代码都在一个视图的drawRect中。 有时,并非总是如此,我看到: “:CGContextFillRects:无效的上下文0xa88a500” 有时似乎我的代码有效,但其他代码失败。 我想画的就像面具一样。

如果你在这里看到任何错误,你能告诉我吗?:

UIGraphicsBeginImageContext(rect.size);     CGContextRef context = UIGraphicsGetCurrentContext();     CGContextSetFillColorWithColor(context,[[UIColor blackColor] CGColor]);     CGContextFillRect(context,rect);

switch (shape) {
    case SHAPE_ELIPSE:
        //
        CGContextAddEllipseInRect(context, maskBox);
        CGContextSetFillColorWithColor(context, [[UIColor whiteColor] CGColor]);
        CGContextFillEllipseInRect(context, maskBox);
        break;
    case SHAPE_SQUARE:
        //
        CGContextAddRect(context, maskBox);
        CGContextSetFillColorWithColor(context, [[UIColor whiteColor] CGColor]);
        CGContextFillRect(context, maskBox);
        break;
    default:
        break;
}
CGContextStrokePath(context);
UIImage *backGroundImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

CGImageRef maskRef = backGroundImage.CGImage;

CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                    CGImageGetHeight(maskRef),
                                    CGImageGetBitsPerComponent(maskRef),
                                    CGImageGetBitsPerPixel(maskRef),
                                    CGImageGetBytesPerRow(maskRef),
                                    CGImageGetDataProvider(maskRef), NULL, false);

UIGraphicsBeginImageContext(rect.size);
CGContextRef contextBlack = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(contextBlack, [[UIColor blackColor] CGColor]);
CGContextFillRect(context, rect);
UIImage *blackImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

CGImageRef masked = CGImageCreateWithMask([blackImage CGImage], mask);
CGImageRelease(mask);
[self setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageWithCGImage:masked]]];
CGImageRelease(masked);

非常感谢。

2 个答案:

答案 0 :(得分:1)

调用UIGraphicsEndImageContext()会使上下文context无效。但是,您的程序继续使用该变量。 IOW,您应该在第二次致电context之后重新分配UIGraphicsBeginImageContext()

context = UIGraphicsGetCurrentContext();

答案 1 :(得分:1)

除了Justin回答:无需将代码放在drawRect中。它将被多次调用,你只需要在“形状”改变时重绘图案背景。

调用setShape中的代码。