在 UIView::drawRect() 之外绘制 UIBezierPath?
Draw UIBezierPath outside of UIView::drawRect()?
我正在尝试围绕视图的边缘绘制一组小圆圈,以反映我在我的应用程序中控制的物理灯光(像素)。这些圆圈会经常改变颜色。所以我创建了一个 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()
内部或外部?
我会删除图像上下文并直接绘制。我只会从 draw rect 内部调用 render
。
当颜色发生变化时,我会更新相应的模拟器和 post 通知,让 'system' 知道它发生了。在这种情况下,通知是合适的,因为您不想知道对更改事件感兴趣的是什么,而系统中的多个事物可能感兴趣。
当您的视图控制器收到通知时,它只需在视图上调用 setNeedsDisplay
,这将导致模拟器在下一个绘制周期中呈现。
我正在尝试围绕视图的边缘绘制一组小圆圈,以反映我在我的应用程序中控制的物理灯光(像素)。这些圆圈会经常改变颜色。所以我创建了一个 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()
内部或外部?
我会删除图像上下文并直接绘制。我只会从 draw rect 内部调用 render
。
当颜色发生变化时,我会更新相应的模拟器和 post 通知,让 'system' 知道它发生了。在这种情况下,通知是合适的,因为您不想知道对更改事件感兴趣的是什么,而系统中的多个事物可能感兴趣。
当您的视图控制器收到通知时,它只需在视图上调用 setNeedsDisplay
,这将导致模拟器在下一个绘制周期中呈现。