在Objective-C中绘制简单形状时出错

时间:2014-03-03 09:58:39

标签: ios objective-c cocoa-touch uibezierpath

我有一个应用程序循环遍历坐标系并使用UIBezierPath绘制形状。当我运行应用程序时,我收到以下错误:

<Error>: CGContextSetStrokeColorWithColor: invalid context 0x0.

以下是我用来测试的代码的简化版本,并尝试并解决此错误:

UIBezierPath *testPath = [UIBezierPath bezierPath];

[[UIColor blackColor] setStroke];
[[UIColor redColor] setFill];

CGContextRef testPathRef = UIGraphicsGetCurrentContext();

[testPath moveToPoint:CGPointMake(100, 100)];
[testPath addLineToPoint:CGPointMake(200, 100)];
[testPath addLineToPoint:CGPointMake(100, 200)];
[testPath fill];
[testPath stroke];
[testPath setLineWidth:5];
[testPath closePath];

Apple自己的文档似乎表明,以上就是我需要绘制一个简单的形状并为其着色,它简单地提到了“上下文”,但它是可选的。我已经看过涉及这种错误的其他问题,有些似乎暗示一个对象为空(0x0),但我无法弄清楚出了什么问题。

编辑:我创建了一个名为CreateButtons的新类,它是UIView的子类并调用它,但drawRect方法似乎永远不会被触发。

-(void)drawShape:(NSString*)locationString buttonTagged:(NSInteger)buttonTag{

    CreateButtons *createButtonsInstance = [[CreateButtons alloc] init];

}

CreateButtons实现:

#import "CreateButtons.h"

@implementation CreateButtons

-(id)initWithFrame:(CGRect)frame {

    self = [super initWithFrame:frame];

    if (self) {
        NSLog(@"initWithFrame fired");

    }
    return self;
}

-(void)drawRect:(CGRect) rect {
    NSLog(@"Draw rect fired");

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 2.0);
    CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);

    CGContextMoveToPoint(context, 100, 100);
    CGContextAddLineToPoint(context, 150, 150);
    CGContextAddLineToPoint(context, 100, 200);
    CGContextAddLineToPoint(context, 50, 150);
    CGContextAddLineToPoint(context, 100, 100);

    CGContextStrokePath(context);
}

1 个答案:

答案 0 :(得分:0)

确保在Context有效时调用此代码。这仅在drawRect:子类内的UIView方法中。您可能需要修改代码才能以这种方式工作,因为它是一种基本的iOS实践。在这种情况下,操作系统会为您设置正确的CGContext

否则您可能需要创建自己的CGContext