繁体   English   中英

在Objective-C的2点之间画线

[英]draw line between 2 points in objective-c

我想在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环境变量。

我尝试UIViewControllerBasedStatusBarAppearanceYES它不适合我工作,我尝试删除UIViewControllerBasedStatusBarAppearance它不适合我

您不能只在需要时调用drawRect: ,所以您的代码行:

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

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

[self.drawLine setNeedsDisplay];

要么

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM