在objective-c中画2个点之间的线

时间:2016-02-25 11:01:51

标签: ios objective-c cgcontext

我想画2点之间的界线。但是UIGraphicsGetCurrentContext()返回null

ViewController.m

self.drawLine.firstPoint = self.btnPointOne.bounds.origin;
self.drawLine.secondPoint = self.btnPointTwo.bounds.origin;
[self.drawLine drawRect:self.drawWatchModeView.bounds];

DrawLine.h

@interface DrawLine : UIView{
    CGContextRef context;
}

@property (assign, nonatomic) CGPoint firstPoint;
@property (assign, nonatomic) CGPoint secondPoint;

DrawLine.m

- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
    context = UIGraphicsGetCurrentContext();
    // Drawing code
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
    //line width
    CGContextSetLineWidth(context, 1.0);
    CGContextMoveToPoint(context, self.firstPoint.x, self.firstPoint.y);
    CGContextAddLineToPoint(context, self.secondPoint.x, self.secondPoint.y);
    // and now draw the Path!
    CGContextStrokePath(context);
}

但是错误

  

CGContextSetStrokeColorWithColor:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextSetLineWidth:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextMoveToPoint:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextAddLineToPoint:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextDrawPath:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextSetStrokeColorWithColor:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextSetLineWidth:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextMoveToPoint:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextAddLineToPoint:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextDrawPath:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextSetStrokeColorWithColor:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextSetLineWidth:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextMoveToPoint:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextAddLineToPoint:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextDrawPath:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextSetStrokeColorWithColor:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextSetLineWidth:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextMoveToPoint:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextAddLineToPoint:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量   CGContextDrawPath:无效的上下文0x0。如果你想查看回溯,请设置CG_CONTEXT_SHOW_BACKTRACE环境变量。

我尝试UIViewControllerBasedStatusBarAppearance设置YES它对我不起作用 我尝试删除UIViewControllerBasedStatusBarAppearance它对我不起作用

1 个答案:

答案 0 :(得分:1)

您无法随时拨打drawRect:,所以您的行:

[self.drawLine drawRect:self.drawWatchModeView.bounds];

需要更改以要求操作系统运行绘制周期。当发生这种情况时,将设置绘图上下文,一切就绪。当您明确地运行它时,上下文不存在。因此,将该行更改为:

[self.drawLine setNeedsDisplay];

[self.drawLine setNeedsDisplayInRect:self.drawWatchModeView.bounds];