我有一个应用程序循环遍历坐标系并使用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);
}
答案 0 :(得分:0)
确保在Context有效时调用此代码。这仅在drawRect:
子类内的UIView
方法中。您可能需要修改代码才能以这种方式工作,因为它是一种基本的iOS实践。在这种情况下,操作系统会为您设置正确的CGContext
。
否则您可能需要创建自己的CGContext
。