2011-10-23 123 views
1

夥計們我有一些麻煩子類化UIView。 我正在創建一個IconView。 只是它是其他子視圖的容器。 在我的圖標型控件我有這個伊娃: 的UIImageView _background 的UIImageView _icon 的UILabel _iconLabel。高效地繼承UIView

當我初始化圖標型控件我設置這3伊娃與圖像,文本以及像roundCorner和陰影部分石英效果,然後我將它們添加到自視圖。 一切正常,但如果我在一個空的滾動視圖中插入一些IconView(即10),滾動效果不光滑。我嘗試在滾動視圖中插入數千個簡單的UIViews並且滾動動畫完美地工作。 只有10個IconView滾動動畫效果非常差。

我可以採用不同的方式保留UIImage而不是UIImageViews,並在drawRect:方法中繪製它,但在這種情況下,我會放鬆Autoresizing屬性和Quartz效果。

有什麼建議嗎?謝謝,Gabriele。

回答

1

不幸的是,UIScrollView得慢蠻快的。有很多關於此主題的帖子和文章,如this Questionthis (defect) blogpost以及it's sample code。在2010年的WWDC視頻中,還有三場關於「iOS的性能優化」的內容,我強烈建議您觀看。總結結論:儘可能少使用子視圖,並特別注意避免透明膠片。

好的,對於ScrollViews中的一般演講,現在對您的案例有很多瞭解:同樣的問題,我使用了上述文章和視頻中的所有提示,並且在改進性能的同時,夠了。我曾和你一樣,用一些圓角來表現一些圖像,我發現這絕對會殺死性能。只是停用它們比其他所有東西都更有幫助。這可能與陰影效果相同。

現在,最有可能的,你想保持這些圓角。我建議你創建一個你的圖像的副本(或者如果可能的話拍下原件),並使用those awesome classes直接操縱它們。這樣,效果將只應用一次。它對我來說非常合適。對於你的陰影,你可能只需要在Photoshop中創建一些並在新的ImageView中使用它們。

如果這還不夠,你應該嘗試緩存你的IconViews,就像TableViewCells被緩存,如果你還沒有這樣做。

+0

我試圖刪除所有的石英效果,它幫助了很多。謝謝,但是,意味着Quartz很不可用?我應該只用於靜態渲染嗎?我不這麼認爲......我會閱讀所有文章,並會觀看視頻以提高性能。 – Gabriele

+0

石英在滾動視圖中表現不佳。如果停用它解決了你的問題,視頻和文章將不會,至少不是那麼好。正如我所建議的那樣,如果shouldRasterize不起作用,那麼您應該直接進行操作。 – Phlibbo

+0

我開始閱讀關於性能優化的WWDC 10講座,但我需要找時間觀看視頻。在這一刻,我禁用了所有的Quartz效果,並且我建議使用Categories進行圓角。真棒!現在,帶有一百個IconView的滾動速度非常快,但有一千個開始緩慢,但在我的情況下,我需要在滾動條中使用這個15或20。現在的結論是,正如你所說的,不要在滾動內使用Quartz: – Gabriele

1

的問題可能會是石英陰影。如果使用很多,他們可以真正減慢渲染速度。

之前你寫他們,你可以試試你的CALayer的shouldRasterize屬性設置爲YES。這使得石英只能渲染陰影一次並將其存儲在緩衝區中。看看它是如何發展的。

+0

你還應該將'rasterizationScale'設置爲屏幕比例。它可以通過'[[UIScreen mainScreen] scale]'訪問,但我相信在API差異方面有一些複雜性...請參閱http://stackoverflow.com/questions/3130420/how-to-call-uiscreen-mainscreen-scale -in-a-universal-app-for-the-iphone- – joerick

+0

shouldRasterize in幫助,它在我提到的其中一個視頻中介紹。如果你的細胞內不需要任何動畫,你可以嘗試一下。 – Phlibbo

+0

@joerick它幫助。現在動畫好,但不光滑。 – Gabriele