2012-05-22 31 views
1

我最近開始創建自己的控件,並且我似乎對理解如何使用drawRect有點麻煩。使用drawRect的最佳做法

基本上我有3個問題。

  1. 有條件drawRect的是一個好主意嗎?即。基於屬性或實例變量的不同繪製代碼。

  2. 動畫改變drawRect繪圖的最佳方法是什麼?例如,帶有動畫填充和取消填充的燃油表控件。

  3. 最後,我看過的用drawRect進行動畫處理的例子往往會使用定時器,這在實踐中真的是一個好方法嗎?看起來較重的應用程序會遇到該方法的問題。

我想第4個會是,有沒有,也許這是一個更好的地方做這種東西?

回答

2

有條件drawRect的是一個好主意嗎?即。基於屬性或實例變量的不同繪製代碼。

當然,爲什麼不呢?如果您的drawRect:方法變得笨拙,您可以將其拆分爲多個方法,然後根據視圖的屬性從drawRect:調用。例如。你可以像drawBackgrounddrawTitle方法等

什麼是動畫更改的drawRect的圖紙最好的方法是什麼?例如,帶有動畫填充和取消填充的燃油表控件。

這取決於。對於非常小的視圖,您可以從計時器中調用setNeedsDisplay,但對於較大的視圖,您經常會遇到這種方法的性能問題。

動畫更改通常可以通過將視圖從多個子視圖或可以使用Core Animation進行動畫製作的圖層(或簡化的UIView動畫方法)合成來更好地完成。

+0

「動畫的變化往往是更好地合成你的觀點了多個子視圖或層可以與核心動畫是動畫(或者簡單的UIView動畫的方法)來完成。」你能指出我的一些例子嗎? – Weston

+0

不知道你在找什麼。那裏有很多關於iOS動畫的資料。您如何結合不同的技術取決於您的自定義視圖的性質。例如。對於一個簡單的進度條,只需改變「bar」子視圖的大小(通常可以硬件加速),而不是重繪整個視圖,包括每次進程更改時的靜態背景...... – omz

+0

我想我只是在計劃出題目時遇到問題,我猜那是鉛筆和紙張的用處。非常感謝您的幫助。 – Weston