2011-03-02 81 views
1

編程的iOS,我有一個複合自定義視圖組成的許多UIViews。這個複合材料中的一些UIViews負責爲一些自定義着色繪製陰影和其他元素。陰影和陰影需要在UIRotationGestureRecognizer識別旋轉時重繪。然而,旋轉的速度遠非令人滿意。當我註釋掉setNeedDisplay時,旋轉速度很好。但是,如果我確實調用了setNeedDisplay,那麼即使我評論了陰影和陰影視圖的所有drawRects中的所有內容,旋轉仍然顯着。自定義UIview自由旋轉太慢

有沒有什麼建議來加快速度?

我可以想出一個可能的解決方案:確保系統在旋轉時調用drawRect的次數較少。但我不知道該怎麼做,也不知道這是否是最好的解決方案。任何建議表示讚賞。謝謝。

回答

0

太頻繁地調用setNeedsDisplay:,尤其是每一幀都會很慢。 setNeedsDisplay在CPU上運行,而不是在GPU上運行。在旋轉和縮放期間不要重繪視圖。等到動畫結束,然後致電setNeedsDisplay:「渲染」最終位置。

看看UIKit的觀點如何不同處理大型動畫:

  • 雖然MapKit放大時,地圖圖像規模和看起來模糊。一旦縮放手勢停止,它將按照該比例呈現新圖像。 (在這種情況下,圖像從互聯網上下載,但它仍然說明了這一概念。)

  • ZoomingPDF示例代碼(請參閱Apple開發人員文檔)顯示瞭如何縮放PDF並不是實時呈現,而是在縮放飾面。

希望這會有所幫助。

+0

感謝您的建議。不幸的是,陰影和陰影模仿3D對象,並且需要在旋轉過程中重繪,否則它看起來很奇怪。但是,謝謝你指出mapkit和pdf的例子。 – huggie

+0

UIKit可能不適用於您嘗試實現的效果。 – bentford

+0

你可能是對的。我認爲這樣做太慢了。我會給你正確的答案。 – huggie