关于UIBezierPath绘制控制台报错的问题

2016-08-01  本文已影响1220人  策马鞭程

代码:

UIBezierPath *path =[UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(2, 2)];
[path addLineToPoint:CGPointMake(self.frame.size.width-10, 2)];
[path stroke];

控制台打印:

<Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.**
<Error>: CGContextSetLineWidth: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.**
<Error>: CGContextSetLineJoin: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.**
<Error>: CGContextSetLineCap: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.**
<Error>: CGContextSetMiterLimit: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.**
<Error>: CGContextSetFlatness: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.**
<Error>: CGContextAddPath: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.**
<Error>: CGContextDrawPath: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.**
<Error>: CGContextRestoreGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.**
Paste_Image.png

解决方案:


- (void)initBottomLayerProgress:(NSInteger)pro
{
    self.backgroundColor = [UIColor clearColor];
    self.layer.delegate = self;
    [self.layer setNeedsDisplay];
}

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
  UIGraphicsPushContext(ctx);  // 参数转化为当前上下文
  UIBezierPath *path =[UIBezierPath bezierPath];
  path.lineWidth = 5;
  [path moveToPoint:CGPointMake(2, 2)];
  [path addLineToPoint:CGPointMake(self.frame.size.width-10, 2)];
  [path stroke];

  UIGraphicsPopContext(); // 恢复上下文环境。

}

self:为当前自定义View对象

如果你持有一个context:参数,那么使用UIKit提供的方法之前,必须将该上下文参数转化为当前上下文。幸运的是,调用UIGraphicsPushContext 函数可以方便的将context:参数转化为当前上下文,记住最后别忘了调用UIGraphicsPopContext函数恢复上下文环境。

上一篇下一篇

猜你喜欢

热点阅读