2012-01-12 49 views
2

將視圖添加爲子視圖與在該視圖的drawRect方法中繪製視圖之間有什麼區別?iPhone - UIView添加一個子視圖vs drawRect?

我使用了兩種方法,但除了顯而易見之外,例如,如果您在drawRect中執行操作,它將是單個視圖,而不是兩個視圖,或者作爲子視圖添加更容易。是否有任何特定的情況下,你應該肯定使用一個在另一個?

回答

3

覆蓋-drawRect:可以是繪製複雜的UITableViewCell的好方法。將所有子視圖合成並繪製爲一個視圖可幫助表視圖以無法衡量的方式滾動性能。儘管如此,我通常堅持使用最高級別的API,並且只有在性能受到影響時纔會下降到較低級別。

+0

感謝您的支持。在我的應用程序中,單元格可以有很多子視圖(沒有限制,但通常在5到20之間),並且我已經報道過,使用3GS它不是很流暢。現在我有一個想法,爲什麼! – ksol 2012-01-12 21:41:09

+0

如果這些子視圖有任何alpha,那麼這是個大問題。 GPU在努力爲1/60秒的每一幀完成所有合成工作而努力工作。如果繪圖沒有及時完成,那麼該框架會丟失,導致性能不穩定。 – 2012-01-12 21:42:59

+0

子視圖是帶有漸變背景的自定義標籤,我不會用不透明度調整。但是,可能來自於此 – ksol 2012-01-12 21:45:35

4

添加子視圖比較容易,因爲您指出,在90%的案例中,我真的認爲這沒有比賽。您通常應該添加一個子視圖,讓圖書館處理子視圖的正確位置圖。

我只使用-drawRect:在我的視圖中完成自定義繪圖,但不繪製子視圖,這會造成不必要的複雜性。如果你需要很多的表現,-drawRect:可以幫助你。此外,在簡單繪圖的情況下,-drawRect:是非常好的,而不是做幾個子視圖。但總的來說,只需添加一個子視圖就可以了。

如果將來您決定要這些子視圖接收觸摸事件或以交互方式處理事物,那麼重構-drawRect:代碼會更困難。