2015-12-08 59 views
1

我想繪製一組圍繞視圖邊緣的小圓來鏡像我在我的應用程序中控制的物理燈光(像素)。這些圈子會頻繁改變顏色。所以我創建了一個PixelSimulator對象來將每個圓圈繪製成一個自定義的UIView對象。在UIView :: drawRect()之外繪製UIBezierPath?

下面是相關的代碼

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,但也無濟於事。

我需要改變什麼才能讓我的貝塞爾路徑隨時在drawRect()的屏幕上畫出來嗎?

+0

您的圖像上下文有什麼計劃?你什麼時候打電話給渲染? – Wain

+0

當相應的物理光源顏色發生變化時,我會調用'render()'。 – turibe

+0

從哪裏?在抽籤?設置視圖以在更改時顯示?我不會使用圖像上下文,我會直接繪製視圖或圖層。 – Wain

回答

0

我想刪除圖像上下文,並直接繪製。我只能從內部抽籤回撥render

當顏色發生變化時,我會更新相應的模擬器併發布通知讓「系統」知道它發生了。在這種情況下,通知是合適的,因爲您不想知道對更改事件感興趣的內容,並且系統中的多個內容可能會感興趣。

當視圖控制器接收到通知時,它只會在視圖上調用setNeedsDisplay,這將導致模擬器在下一個繪製週期被渲染。

+0

這種方法奏效,可能比我想象的要高效得多。非常感謝。 – turibe

相關問題