2014-02-14 71 views
0

我找了一些建議。我正在構建一個照片編輯應用程序,需要在屏幕上水平顯示縮略圖(20+)。每個縮略圖都是通過將一個小圖像通過GPUImage然後使用線程顯示在屏幕上來創建的。延遲加載的UIScrollView或UITableView的

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ 

       UIImage *imageWithEffect = [self editImage:[obj objectAtIndex:0] ImageToEdit:thumbnailImage]; 

        dispatch_async(dispatch_get_main_queue(), ^{ 

         [imageViewWithEffect setImage:imageWithEffect]; 
         [activityIndicator removeFromSuperview]; 

        }); 

      }); 

目前我使用的是UIScrollView來顯示圖像,但我發現它需要一些時間來處理所有圖像。當用戶將UIImageView滑入視圖時,我想要做的是「延遲加載」圖像。問題是我不確定如何去查找當前正在查看的圖像。

有些人提到,它可能是更容易使用UITableView!而非。有誰能提供一些建議嗎?

感謝

回答

2

根據你想要如何顯示你的數據(即圖片+標題+有關圖片的細節或者只是在簡單的,普通的imageView中),因爲這個懶加載是事實,它確實更容易去UITableView或UICollectionView這兩種類別的默認,內置和難以避免的行爲。

它們都是可滾動的,並顯示可以通過StoryBoard設計的單元格(UITableViewCell或UICollectionViewCell)(例如,在那裏添加一個imageView,下面有一個標籤......)並使用委託模式懶惰地詢問控制器在單元即將到達屏幕時顯示。

讓我們假設你希望使用的CollectionView(當時喲可以顯示網格狀佈局的幾個ImageView的),但一會的tableView工作,99%的方式相同。 你要做的第一件事是的CollectionView添加到您的故事板,並添加一個的CollectionView裏面UICollectionViewCell,並與自己的設計定製(即裏面添加一個ImageView的)。你的CollectionView可以包含多個單元設計(只是一個ImageView的正常圖像,用「新」絲帶爲新增加的圖像的ImageView的,用「最後編輯」文本框用於編輯圖像的ImageView的),但你應該在給予(仍storyBoard)每個設計的唯一標識符,在每個設計中爲每個單元的UI組件設置一個標籤值。

一旦佈局完成後,申報場景控制器作爲數據源爲您的CollectionView和實施方法

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section;

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;

第一個必須返回總順應了UICollectionViewDataSource協議要顯示的圖像數量(以便底層滾動視圖可以縮放其內容大小),第二個是讓您返回單元格以顯示給定的indexPath,它基本上是一個包裝類,它包含ns項目索引和部分索引。 當單元格即將出現在屏幕上時,第二種方法被稱爲lazily,因此在此方法中,您可以根據indexPath.item值(作爲要顯示的圖像的索引)檢索縮略圖圖像, StoryBoard通過將- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;發送到collectionView來定義設計。通過將-(UIVIew *)viewWithTag:(NSInteger)tag消息發送到上一個方法返回的單元格,然後將它們的文本/圖像屬性設置爲要顯示給用戶的內容,通過標記值獲取單元的設計元素。

這是一個相當合理的方法你的答案,我會很樂意幫助你更技術上,如果證明是必要的。

乾杯,

+0

很好的答案。 +1用於收集視圖方法。 – Cyrille

0

使用泰伯維這是該更加靈活。您可以輕鬆加載並輕鬆進行選擇。同時,我建議UICollectionView這一點。這對此也更有用。

scrollview問題:在滾動之前,您需要一次添加並加載所有圖像,這會讓您的應用程序變慢。根據您的要求,Frame calculation也有點複雜。