2010-06-08 28 views
2

我正在編寫一個應用程序在Ipad上,在我的應用程序的某一點我介紹一個ViewController與presentModalViewController。卸載UIImageView的圖像多數民衆贊成在屏幕外

我的ViewController是一個UISScrollView誰採取較大的模態查看,並在其中我顯示一些圖像,我允許pagingEnabled,所以我可以看到我的所有圖像在scrollView內。

有時我不得不滾動視圖內顯示多於10幅圖像,所以有這樣的錯誤 接收存儲器警告級別1後=這一接收存儲器警告級別= 2和finnaly調試器退出由於信號10(Sigbus)。

我該怎麼辦?有沒有辦法卸載屏幕上的圖像呢?或其他事情要做?

感謝,

回答

1

我想你將所有的圖像添加到UIScrollView?然後,iPad必須將全部10張圖像保存在內存中。如果它們是全屏圖像,它們中的每一個都將佔用大約3 MB的內存,因此您只使用30MB來將10張圖像保存在滾動視圖中。

您應該只添加一個或兩個實際可見的圖像。一旦它們滾出視線之外,請從UIScrollView中刪除UIImageView(並確保您不會將其保留在其他任何地方,因此可以將其解除分配)。當新圖像滾動到視線內時,只需將它添加到UIScrollView即可。

在你的UIScrollViewDelegate方法-scrollViewDidScroll:得到當前contentOffset並使用它來計算哪些圖像是可見的。附件1:

0

其實,這個問題甚至在iPhone 3G,它甚至不能管理同時顯示兩個全尺寸照片(與它自己的照相機拍攝)差。

如果您可以提前縮小照片大小(服務器端,如果您從自己的服務中抓住它們,或者客戶端,如果它們以某種方式在設備上生成或從第三方服務檢索到) , 你應該。它們的加載速度會更快,並且可以將更多內容放在屏幕上,而不會遇到內存問題。

Three20庫有一個非常棒的iPhone照片瀏覽控制。我很確定他們在任何時候都只有三張照片......你正在看的照片以及照片向前或向後。

http://github.com/facebook/three20

我也覺得是Three20控制(在./tree/ipad)的iPad的分支,雖然我不知道他們是否包括照片瀏覽器或沒有,沒試過他們還有我自己......如果你不想在你的應用程序的特定功能上花費大量時間,那麼這對你來說可能是一種選擇。如果iPad照片瀏覽器沒有完成,也許你可以適應iPhone版本以適應你的需求(不應該很難)。

如果您想自己烘烤此功能,我會從UITableViewController中獲取靈感。您的控制器應該附帶相關的數據源和委託協議以檢索照片並響應用戶事件。控制器基類本身應該重用三個UIImageViews,並且應該對這些UIImageView進行混洗,以創建用戶在大型列表中滾動的錯覺。

+0

PS。)來自鏈接的帖子;如果你有興趣從字面上理解如何在滾動視圖中創建「虛擬頁面」,請查看:http://cocoawithlove.com/2009/01/multiple-virtual-pages-in-uiscrollview.html – Steve 2010-06-08 05:55:58

相關問題