Ios5 自定义CALayer-无效的上下文0x0

Ios5 自定义CALayer-无效的上下文0x0,ios5,calayer,cgcontext,quartz-core,Ios5,Calayer,Cgcontext,Quartz Core,我正在尝试构建一个使用层的应用程序,我的应用程序结构是 UIView --> UIScrollView --> UIView --> LayersView (Custom UIView) --> UIImageView 我想向LayerView添加多个层,因此我构建了一个自定义的CALayer,它使用UIBezierPath绘制一组点 CALayerBezierPath.h #import <Q

我正在尝试构建一个使用层的应用程序,我的应用程序结构是

UIView --> UIScrollView --> UIView --> LayersView (Custom UIView)
                                   --> UIImageView
我想向LayerView添加多个层,因此我构建了一个自定义的
CALayer
,它使用
UIBezierPath
绘制一组点

CALayerBezierPath.h

#import <QuartzCore/QuartzCore.h>

@interface CALayerBezierPath : CALayer {
    NSMutableArray *pointsArray;
}
@property (nonatomic, retain) NSMutableArray *pointsArray;

- (void) initVariables;
- (void) addNewPoints:(CGPoint)newPoint;
@end

那么,问题在哪里,为什么上下文无效,为什么我不能在自定义的
CALayer
中绘制?

问题是我没有推上下文
ctx
,我正在尝试推送&pop。因此,解决方案非常简单,只需在
drawInContext

UIGraphicsPushContext(ctx);

一切正常。

嗨,斯卡-谢谢你发表你的答案,节省了我一些时间。只有一件事要补充-如果你要推动你必须弹出,即一个人必须离开现有的环境在相同的状态时完成绘图。。。因此,无论在何处推送上下文,请确保调用UIGraphicsPopContext();完成绘图后。
    self.layer.backgroundColor = [UIColor whiteColor].CGColor;
    self.layer.cornerRadius = 20.0;
    self.layer.frame = CGRectInset(self.layer.frame, 0, 0);

    for (PlansClass *pclass in layersContent) {
        CALayerBezierPath *sublayer = [CALayerBezierPath layer];
        [sublayer initVariables];

        NSDictionary* json = [pclass.listOfPoints objectFromJSONString];

        float largerX = 0; float largerY = 0;
        float smallerX = 10000; float smallerY = 10000;

        for (NSDictionary *dic in json) {

            [sublayer addNewPoints:CGPointMake([[[json objectForKey:dic] objectForKey:@"x"] floatValue], [[[json objectForKey:dic] objectForKey:@"y"] floatValue])];

            if (largerX < [[[json objectForKey:dic] objectForKey:@"x"] floatValue]) {
                largerX = [[[json objectForKey:dic] objectForKey:@"x"] floatValue];
            }

            if (smallerX > [[[json objectForKey:dic] objectForKey:@"x"] floatValue]) {
                smallerX = [[[json objectForKey:dic] objectForKey:@"x"] floatValue];
            }

            if (largerY < [[[json objectForKey:dic] objectForKey:@"y"] floatValue]) {
                largerY = [[[json objectForKey:dic] objectForKey:@"y"] floatValue];
            }

            if (smallerY > [[[json objectForKey:dic] objectForKey:@"y"] floatValue]) {
                smallerY = [[[json objectForKey:dic] objectForKey:@"y"] floatValue];
            }
        }
        sublayer.frame = CGRectMake(smallerX, smallerY, largerX - smallerX, largerY - smallerY);
        sublayer.backgroundColor = [UIColor redColor].CGColor;
        [self.layer addSublayer:sublayer];
        [sublayer setNeedsDisplay];
    }
2012-09-13 08:05:47.648 abcd[20744:707] CALayerBezierPath - drawInContext
Sep 13 08:05:47 ipad-5 abcd[20744] <Error>: CGContextSetFillColorWithColor: invalid context 0x0
Sep 13 08:05:47 ipad-5 abcd[20744] <Error>: CGContextSetStrokeColorWithColor: invalid context 0x0
Sep 13 08:05:47 ipad-5 abcd[20744] <Error>: CGContextSaveGState: invalid context 0x0
Sep 13 08:05:47 ipad-5 abcd[20744] <Error>: CGContextSetFlatness: invalid context 0x0
Sep 13 08:05:47 ipad-5 abcd[20744] <Error>: CGContextAddPath: invalid context 0x0
Sep 13 08:05:47 ipad-5 abcd[20744] <Error>: CGContextDrawPath: invalid context 0x0
Sep 13 08:05:47 ipad-5 abcd[20744] <Error>: CGContextRestoreGState: invalid context 0x0
Sep 13 08:05:47 ipad-5 abcd[20744] <Error>: CGContextSaveGState: invalid context 0x0
Sep 13 08:05:47 ipad-5 abcd[20744] <Error>: CGContextSetLineWidth: invalid context 0x0
Sep 13 08:05:47 ipad-5 abcd[20744] <Error>: CGContextSetLineJoin: invalid context 0x0
Sep 13 08:05:47 ipad-5 abcd[20744] <Error>: CGContextSetLineCap: invalid context 0x0
Sep 13 08:05:47 ipad-5 abcd[20744] <Error>: CGContextSetMiterLimit: invalid context 0x0
Sep 13 08:05:47 ipad-5 abcd[20744] <Error>: CGContextSetFlatness: invalid context 0x0
Sep 13 08:05:47 ipad-5 abcd[20744] <Error>: CGContextAddPath: invalid context 0x0
Sep 13 08:05:47 ipad-5 abcd[20744] <Error>: CGContextDrawPath: invalid context 0x0
Sep 13 08:05:47 ipad-5 abcd[20744] <Error>: CGContextRestoreGState: invalid context 0x0
2012-09-13 08:05:47.650 abcd[20744:707] <CGContext 0x15d950>
UIGraphicsPushContext(ctx);