3

50 個の画像 URL を含む画像 URL plist があります。それを UICollectionview に表示しようとしていますが、遅くなりすぎています。一度に 9 個のセル (画像) を 3x3 (3 行と 3 列) のように表示しています。最初に表示するにはどうすればよいですか?ロード時に9枚の画像、次のスクロールで次の9枚の画像.?それは可能ですか? 画像をロードするためにSDWebImagesを試しましたが、うまくいきません。助けてください。

CODE INSIDE collectionView cellForItemAtIndexPath: () コメント内のコードは、画像の読み込みに時間がかかります。そのコードは、画像が存在しない場合にドキュメント ディレクトリから画像を読み込むために使用され、1 か所のホルダー画像に表示されます。

    cell = nil;

    cell = (GMMCollectionViewCell *)[self.collectionView dequeueReusableCellWithReuseIdentifier:@"test" forIndexPath:indexPath];

    cell.tag = indexPath.row;
     docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];



    NSString *path;
    BOOL isImageLoaded = YES;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///

  bookImage = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", docPath, [[allbooksImage objectAtIndex:indexPath.row] lastPathComponent]]];

/////////////////////////////////////////////// ///////////////////////////////

    if(bookImage == nil){
        isImageLoaded = NO;
    }
    if(!isImageLoaded){
        [[cell grid_image] setImage:[UIImage imageNamed:@"App-icon-144x144.png"]];
   } else{

       [[cell grid_image] setImage:bookImage];





    }

    sharedManager.bookID=bookId;

return cell;

これは私が期待しているものです

ここに画像の説明を入力

しかし、私はこのようになっています、スクロールなしのアプリの読み込み時間(最初の画像:3列は空です) ここに画像の説明を入力

最初のスクロール後のアプリ画面 (2 番目の画像: 2 つの画像を表示する最後の列、残りの部分はまだ空) ここに画像の説明を入力

長いスクロール後のアプリ画面 (3 番目の画像: 最後の列にいくつかの画像があり、残りの列はまだ空です) ここに画像の説明を入力

アプリ画面をもう一度上にスクロールすると、最初の画像が変わります ここに画像の説明を入力

4

1 に答える 1

1

以下のコードを試すことができます

[[cell grid_image] setImage:nil];

dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(concurrentQueue, ^{
    bookImage = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", docPath, [[allbooksImage objectAtIndex:indexPath.row] lastPathComponent]]];
    dispatch_async(dispatch_get_main_queue(), ^{
        if (bookImage)
        {
            [[cell grid_image] setImage:bookImage];
        }
        else
        {
            [[cell grid_image] setImage:[UIImage imageNamed:@"App-icon-144x144.png"]];
        }
    });

});

それがあなたのために働くことを願っています。

于 2013-08-12T12:56:25.500 に答える