美文网首页
关于UIBezierPath绘制控制台报错的问题

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

作者: 策马鞭程 | 来源:发表于2016-08-01 13: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函数恢复上下文环境。

    相关文章

      网友评论

          本文标题:关于UIBezierPath绘制控制台报错的问题

          本文链接:https://www.haomeiwen.com/subject/alvxsttx.html