在UIView :: drawRect()之外绘制UIBezierPath?

时间:2015-12-08 07:37:13

标签: ios swift core-graphics uigraphicscontext

我正在尝试在视图边缘周围绘制一组小圆圈来镜像我在我的应用中控制的物理光(像素)。这些圆圈会经常改变颜色。所以我创建了一个PixelSimulator对象,将每个圆绘制成一个自定义的UIView对象。

这是相关代码

class PixelSimulator {
  let size: CGSize;
  let color: UIColor;
  let pixelPath: UIBezierPath;

  init (point: CGPoint, size: CGSize, pixel: Pixel) {
    self.point = point;
    self.size = size;
    self.pixel = pixel;

    pixelRect = CGRect(origin: point, size: size);
    pixelPath = UIBezierPath(ovalInRect: pixelRect);

    color = pixel.color;
  }

  func render () {
    UIGraphicsBeginImageContext(size);

    color.setFill();
    pixelPath.fill();

    UIGraphicsEndImageContext();
  }
}

我尝试过使用CGContextAddEllipseInRect(context, pixelRect)的不同方法无济于事。我也尝试在render()方法中声明pixelPath,但也无济于事。

我需要更改什么才能让我的bezierPath随时在drawRect()内或之外被吸引到屏幕上?

1 个答案:

答案 0 :(得分:0)

我将删除图像上下文并直接绘制。我只能从draw rect中调用render

当颜色发生变化时,我会更新相应的模拟器并发布通知,让'系统'知道它发生了。在这种情况下,通知是合适的,因为您不想知道对更改事件感兴趣的内容,并且系统中的多个内容可能会感兴趣。

当视图控制器收到通知时,它只是在视图上调用setNeedsDisplay,这将导致模拟器在下一个绘制周期中呈现。