2010-05-13 75 views
4

有沒有一種方法可以在該視圖的drawRect()方法以外的iPhone屏幕上繪製(在UIWindow中的UIView中)?如果是這樣,我如何獲得圖形上下文?iPhone:沒有辦法在drawRect之外的屏幕上繪製?

圖形指南提到NSGraphicsContext類,但相關章節似乎是從Mac OS X文檔盲目複製/粘貼的,iPhone SDK中沒有這樣的類。

編輯:我試圖修改視圖的內容在觸摸事件處理程序 - 突出顯示觸摸的視覺元素。在Windows中,我會使用GetDC()/ ReleaseDC()而不是InvalidateRect()/ WM_PAINT的完整週期。試圖在這裏做同樣的事情。將活動的(可觸摸的)元素排列爲子視圖是一個巨大的性能損失,因爲它們有~100個。

+0

也許你可以給你更多的背景知道你想用這個做什麼?這可能有助於其他人提出替代方案。 – 2010-05-13 16:29:51

回答

5

編號爲drawRect:的(或CALayer's)工作。即使你可以在其他地方繪製,它也會是一種代碼味道(就像它在Mac上一樣)。其他任何代碼都應該簡單地更新模型狀態,然後將自己設置爲需要顯示。

當您需要顯示時,將顯示代碼移到其他地方不會讓它變得更快。當你不需要顯示(因此沒有被設置爲需要顯示)時,顯示代碼將不會運行,如果它在drawRect:

我試圖在觸摸事件處理程序中修改視圖的內容 - 突出觸摸的可視元素。在Windows中,我會使用[Windows代碼]。 ...將活動(可觸摸的)元素排列爲子視圖是一種巨大的性能損失,因爲它們有〜100個。

聽起來像Core Animation可能更適合這個。

0

我不認爲能夠繪製外部drawRect ...但獲取當前圖形上下文所有你做的是CGContextRef c = UIGraphicsGetCurrentContext();希望有所幫助。

+6

如果在drawRect()之外調用,則UIGraphicsGetCurrentContext()返回nil。 – 2010-05-13 16:29:33

+1

真的嗎?很高興知道...無論如何,如果你想重畫你可以在你的視圖上調用setNeedsDisplay,這將再次調用drawRect,並且你可以繪製任何你需要的東西 – Daniel 2010-05-13 16:58:22

+0

我特別詢問是否存在替代方案。我會採取一個「否」的答案:) – 2010-05-14 03:46:30

相關問題