0

viewdidload メソッドで画像のスタックを作成しています。画像は PFFile の parse からのものであるため、画像データの fileURL が含まれています。

私の問題は、次の 2 行のコードによってアプリの速度が大幅に低下し、ユーザー エクスペリエンスが損なわれることです。

    //get scene object
    PFObject *sceneObject = self.scenes[i];


    //get the PFFile and filetype
    PFFile *file = [sceneObject objectForKey:@"file"];
    NSString *fileType = [sceneObject objectForKey:@"fileType"];

    //check the filetype
    if ([fileType  isEqual: @"image"])
    {
        //get image
        NSURL *imageFileUrl = [[NSURL alloc] initWithString:file.url];  
        NSData *imageData = [NSData dataWithContentsOfURL:imageFileUrl]; ********** these
        imageView.image = [UIImage imageWithData:imageData];  ********************* lines

    }

この画像/これらの画像 (これは for ループにネストされています) をより迅速に取得するにはどうすればよいですか? PFFiles を含む PFObjects を既にダウンロードし、ローカルに保存しました。

ファイルの URL がどのように機能するのか、私は本当に理解していないと思います。

ありがとうございました。

4

2 に答える 2

2
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{             
        NSURL *imageFileUrl = [[NSURL alloc] initWithString:file.url];  
        NSData *imageData = [NSData dataWithContentsOfURL:imageFileUrl]; 
        dispatch_get_main_queue(), ^{
           imageView.image = [UIImage imageWithData:imageData];
        });
    });

テストしていませんが、これが要点です。ファイルの読み込みをメイン キューから取得し、非同期にします。このキューがディスパッチされるとすぐに戻り、アプリケーションの残りの部分を評価し続けるため、UI が行き詰まることはありません。

于 2015-11-25T19:29:54.397 に答える
0

私はこのようなものを使用しています:

UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[imageFrame addSubview:activityIndicator];
activityIndicator.center = CGPointMake(imageFrame.frame.size.width / 2, imageFrame.frame.size.height / 2);
[activityIndicator startAnimating];


dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
        dispatch_async(queue, ^{
            NSData * imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:thumb]];
            dispatch_async(dispatch_get_main_queue(), ^{
                UIImage *image = [UIImage imageWithData:imageData];
                img.image = image;
                [imageOver addSubview:img];                    
                [activityIndicator removeFromSuperview];
            });
        });
于 2015-11-26T07:07:52.710 に答える