2012-10-20 49 views
0

我使用ICarousel構建應用程序。 旋轉木馬中將會有大約30件物品。 每個項目都是UIImageView顯示動畫的視圖。通過iCarousel ios重新使用視圖

現在我只是提前創建所有30個視圖,將它們添加到數組中,並在需要時提供給旋轉木馬。

 SBTViewController* iv1 = [[SBTViewController alloc] initWithNibName:@"SBTViewController" bundle:nil]; 
    SBTViewController* iv2 = [[SBTViewController alloc] initWithNibName:@"SBTViewController" bundle:nil]; 
..... 
..... 
    SBTViewController* iv30 = [[SBTViewController alloc] initWithNibName:@"SBTViewController_iPhone" bundle:nil]; 


viewsarray = [NSArray arrayWithObjects: iv1,iv2... iv30] 

當傳送帶需要更多的意見 - 我剛剛從陣列

提供意見。然而,我開始越來越MemoryWarnings。 試圖用「reuseView」選項,但它根本不起作用,或者我誤解的東西 每次以下稱爲:

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view 
{ 

} 

我只是試圖改變‘視圖’,以我的屏幕外的景色之一但它似乎並沒有工作。轉盤顯示空白屏幕。

有什麼不對?

感謝

回答

2

ReusingView旨在減少需要通過recy分配/ dealloc的意見抱住它們。但是,因爲您將所有視圖存儲在數組中,它不會對您有所幫助,因爲它們都是立即創建的,並且不會發布。

問題根本上在於您試圖一次將太多圖像加載到內存中(視圖數量x每個視圖的動畫幀數)。

您需要找到一種動態加載幀的方法。嘗試使用我的GLView庫(https://github.com/nicklockwood/GLView),其中包含使用可以實時加載的PVR圖像播放動畫的說明。 GLView庫包含一個類似於UIImageView的GLImageView類,但讓我們指定要播放的圖像文件名數組,而不必事先加載所有圖像。

+0

感謝尼克(感謝偉大的iCarousel!)。你能幫我理解reusingView參數嗎?它是我從Carousel獲得的指針,並且應該在那裏加載我的子視圖,還是我需要初始化視圖並將其傳回給Carousel的指針? –

+0

iCarousel可能包含10,000個視圖,但每次只能看到少數幾個視圖,因此,而不是在數組中存儲10,000個視圖,或者不斷分配釋放視圖,iCarousel會回收相同的幾個視圖。每次視圖離開屏幕時,它都會被回收用於在屏幕上滾動的下一個視圖。 –

+0

因此,如果reusingView參數爲零,則應該創建一個新視圖並將其返回。如果reusingView參數不爲零,則可以忽略它並返回新視圖,也可以重置它的屬性(任何對特定輪播項目索引唯一的內容)並將其返回。 –