Ios 在UIView::drawRect()外部绘制UIBezierPath?
我试图在视图边缘画一组小圆圈,以镜像我在应用程序中控制的物理灯光(像素)。这些圆圈会经常改变颜色。所以我创建了一个PixelSimulator对象,将每个圆绘制成一个自定义UIView对象 这是相关代码Ios 在UIView::drawRect()外部绘制UIBezierPath?,ios,swift,core-graphics,uigraphicscontext,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)
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
当颜色发生变化时,我会更新相应的模拟器,并发布通知,让“系统”知道发生了这种情况。在这种情况下,通知是合适的,因为您不想知道对更改事件感兴趣的是什么,系统中的多个事物可能感兴趣
当视图控制器收到通知时,它只需在视图上调用setNeedsDisplay
,这将导致模拟器在下一个绘制周期中呈现。我会删除图像上下文,直接绘制。我将仅从内部draw rect调用render
当颜色发生变化时,我会更新相应的模拟器,并发布通知,让“系统”知道发生了这种情况。在这种情况下,通知是合适的,因为您不想知道对更改事件感兴趣的是什么,系统中的多个事物可能感兴趣
当视图控制器收到通知时,它只需在视图上调用setNeedsDisplay
,这将导致模拟器在下一个绘制周期中呈现。您对图像上下文的计划是什么?您何时调用渲染?当相应的物理灯光的颜色发生变化时,我将调用render()
。从何处开始?在draw rect中?是否将视图设置为在更改时显示?我不会使用图像上下文,我会直接绘制到视图或图层。物理灯光的颜色会在应用程序的其他地方更改。实际上,当物理灯光的颜色发生变化时,相应的PixelSimulator
的color
会发生变化以匹配,并调用render()
。这发生在drawRect()之外。如果每次颜色变化时我都画一个图层,我不是会有很多图层吗?那会是个问题吗?如果不是的话,你能给出一个答案来解释怎么做吗?你对图像背景的计划是什么?您何时调用渲染?当相应的物理灯光的颜色发生变化时,我将调用render()
。从何处开始?在draw rect中?是否将视图设置为在更改时显示?我不会使用图像上下文,我会直接绘制到视图或图层。物理灯光的颜色会在应用程序的其他地方更改。实际上,当物理灯光的颜色发生变化时,相应的PixelSimulator
的color
会发生变化以匹配,并调用render()
。这发生在drawRect()之外。如果每次颜色变化时我都画一个图层,我不是会有很多图层吗?那会是个问题吗?如果不是的话,你能给出一个答案来解释它是如何工作的吗?这种方法可能比我想象的要有效得多。非常感谢。这种方法很有效,可能比我想象的要有效得多。非常感谢。