1

私の iPhone アプリでは、サムネイル画像のプレビューを表示する必要があります。そのプレビュー画像は、実際にはリモート サーバーから取得します。その大きな画像を画面にロードする前に、プリロード ビューを表示する必要がありますが、実際にはこのプリロード ビューは画面に表示されません。

私が使用したコードは次のとおりです。

zoomview=[[UIView alloc]initWithFrame:CGRectMake(0,0,320,460)];
imageloadview.backgroundColor=[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
[self.view addSubview:imageloadview];
[activity startAnimating];
[self loadimageview];

ここでは、ズーム ビューを画面にロードする代わりに、このロード ビュー メソッドが実行されていますが、サーバーから大きな画像を取得する前にプリロード ビューを表示したいと考えています。

-(void)loadimageview
{
    imageloader.image=[UIImage imageNamed:@""];

    [self loadimage];
}

-(void)loadimage
{
    NSData *data=[NSData dataWithContentsOfURL:[NSURL URLWithString:[picfullarray objectAtIndex:0]]];

    if([data length]==0)
    {
        NSLog(@"data");
    } 
    else
    {
        UIImage *image1=[UIImage imageWithData:data];
        imageloader.image=image1;

        [activity stopAnimating];
        [loadlabel1 setText:@""];
    }
}

サーバーから大きな画像を取得する前に、プリロードされたビューを iPhone 画面に表示するにはどうすればよいですか?

4

3 に答える 3

1

NSURLRequestを使用して画像を非同期にロードする必要があります。

クラスにNSURLRequestDelegateプロトコルを実装させます。の関数- (void)connectionDidFinishLoading:(NSURLConnection *)connectionNSURLRequestDelegate、読み込み完了時にビューを更新するコードを追加します。

// You must declare NSMutableData somewhere to write received data in delegate method
// - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
// I assume the instance of NSMutableData is named data

// If you want to load multiple images, it is a bit tricky, but doable.
// I'll post the code if that is what you need.

- (void) connectionDidFinishLoading: (NSURLConnection *) connection {
    // You may want to declare a instance member to store the image (UIImage*), so that you can restore the view if the view is unloaded due to memory warning.
    UIImage* image = [UIImage imageWithData: data];


    data = nil; // Important. You should clean the data, or it will take up space.
    // You may want to check whether image != nil, since the incoming data may not be image
    [self displayImage: image];
}

- (void) displayImage: (UIImage*) aImage {
    imageloader.image = aImage;
    // Depending on how UIImageView is initialized, you may need to call sizeToFit.
    // Or set the frame accordingly

    [activity stopAnimating];
    [loadlabel1 setText: @""];
}
于 2012-05-27T05:13:38.700 に答える
0

これを簡単に行う方法がある AFNetworking もあります。

https://github.com/AFNetworking/AFNetworking/wiki/Getting-Started-with-AFNetworking

「画像のダウンロードと表示」セクションをご覧ください。

于 2012-06-09T04:18:17.210 に答える
0

SDWebImageフレームワークを使用することをお勧めします。すでに非同期の画像読み込み機能を備えており、非常に使いやすいです。

[imageView.image setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
               placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

NSURLConnectionをいじったり、維持したりすることについて心配する必要はありませんNSData

于 2012-06-09T04:12:15.980 に答える