代码之家  ›  专栏  ›  技术社区  ›  xonegirlz

从UIViewController绘制虚线

  •  2
  • xonegirlz  · 技术社区  · 12 年前

    我有一个UIViewController,里面有UIView,我想在上面画一条直线。什么是最简单、最高效的方法?我该怎么做?它将只是一条宽度为150的灰色水平虚线。我环顾四周,似乎在使用 CGContextSetLineDash是解决方案,以下是我迄今为止所拥有的:

    -(void) drawRect:(CGRect) rect
    {
      CGContextRef context = UIGraphicsGetCurrentContext();
      CGContextSetLineWidth(context, 100);
      CGFloat dashes[] = {1,1};
      CGContextSetLineDash(context, 2.0, dashes, 2);
      CGContextStrokePath(context);
    }
    
    2 回复  |  直到 12 年前
        1
  •  3
  •   omz    12 年前

    CGContextStrokePath 绘制 现在的 路径,但是,您永远不会向上下文添加任何路径,所以不会绘制任何内容。

    在您的 CGContext笔划路径 打电话,你应该会看到一些东西:

    CGContextMoveToPoint(context, 0, self.bounds.size.height * 0.5);
    CGContextAddLineToPoint(context, self.bounds.size.width, self.bounds.size.height * 0.5);
    

    如果你还没有设置笔划颜色,你还应该添加这样的东西(50%灰色):

    CGContextSetRGBStrokeColor(context, 0.5, 0.5, 0.5, 1.0);
    

    我不确定结果是否真的是你想要的,一条图案为{1,1}的100点虚线看起来更像一个带有细条纹图案的矩形,而不是虚线。如果你想让你的点是圆形的,你必须在某种循环中手动绘制这些点。

        2
  •  3
  •   DiegoQ    10 年前

    试试这个:

    CGContextRef context = UIGraphicsGetCurrentContext();
    
    CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
    CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
    CGContextSetStrokeColorWithColor(context, color.CGColor);
    
    
    CGContextSetLineWidth(context, 2.0);
    
    CGFloat lengths[] = {0, 8};
    CGContextSetLineCap(context, kCGLineCapRound);
    CGContextSetLineDash(context, 0.0f, lengths, 2);
    
    CGContextMoveToPoint(context, 10,  10);
    CGContextAddLineToPoint(context, 200, 10);
    
    CGContextStrokePath(context);
    CGColorSpaceRelease(colorspace);