2

私はiPhoneプログラミングの初心者です。UITableView に画像を読み込みたい。私の画像はウェブから来ました。ASIHttp Request画像を使用してから UITableview にロードする必要があることはわかっています。しかし、それを行うと、画像をロードするまで UITableview がハングします。非同期の画像読み込みブロックを使用する場合、リクエストメイドをいつでも再利用するたびにCell==nil、それはしたくありません。

Tableview で使用している次のコード行cellForRowAtIndexpath

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {

        static NSString *CellIdentifier = @"CellIdentifier";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        UIImageView *imgViewCellBg;

        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
            cell.accessoryType=UITableViewCellAccessoryNone;



                   imgViewCellBg = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,151)];
                   imgViewCellBg.userInteractionEnabled = NO;
                     imgViewCellBg.backgroundColor = [UIColor whiteColor];
                   imgViewCellBg.tag = 10000;
                   [cell.contentView addSubview:imgViewCellBg];
                   [imgViewCellBg release];

         }
       else{
                   imgViewCellBg = (UIImageView *)[cell.contentView viewWithTag:10000];
            }


     //-------------------------------- For the image Downloding And Displaying ------
            __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:(MY Url)]];
            [request setCompletionBlock:^{
                // NSLog(@"Image downloaded.");
                NSData *data = [request responseData];
                UIImage *imageCountry = [[UIImage alloc] initWithData:data];

                [imgViewCellBg setImage:imageCountry];
                imageCountry = Nil;

            }];
            [request setFailedBlock:^{
                NSError *error = [request error];
                NSLog(@"Error downloading image: %@", error.localizedDescription);
            }];
            [request startAsynchronous];
            //-----------------------------------------------------------------


 return cell;
4

3 に答える 3

1

https://github.com/SIMHAM/AsyncImageView-1から AsyncImageView ファイルを追加するだけです

次に、以下のようにセルに imageView を追加できます。

AsyncImageView *asyncImageView=[[AsyncImageView alloc] initWithFrame:CGRectMake(15,20,80.0f,110.0f)];
[asyncImageView loadImageFromURL:[NSURL URLWithString:yourImageUrl]];
[cell.contentView addSubview:asyncImageView];
于 2012-10-18T05:20:09.823 に答える
1

私の提案によると、私は SDWebImages A Link of GitHubprojectを使用して非同期を行っています

そして、これを以下の手順のように構成します:-

  • 最初にプロジェクト名を右クリックする必要があります:->ファイルをyourProjectに追加->選択したSDWebImageprojectを追加します

注:- コピー オプションをチェックしないでください

  • Xcode のプロジェクト名をクリックしてフェーズをビルドします:->ターゲットの依存関係:-> + ボタンをクリックして、SDWebimage ARC を追加します。

  • ライブラリをクリックしてリンクバイナリを選択し、+ボタンを追加してlibSDWebimageARC.aを追加し、もう一度+をクリックしてimageIO.frameworkを追加し、libxml2.dylibを追加します

    ビルド設定に移動:->その他のリンク フラグ:-> -ObjC を追加

    およびヘッダー検索パスにこの 3 つの項目を追加します

    1 /usr/include/libxml2

    2 "$(OBJROOT)/UninstalledProducts/include"

    3 「$(TARGET_BUILD_DIR)/usr/local/lib/include」

now build and run its working like smoothly cheers.... :)

画像とそのストアキャッチをロードするためのより簡単で非常に便利なタスクであるため、より迅速な作業が可能になります.

そして、次のような 2 行のコードだけで画像を非同期化できます。

.m:-

#import <SDWebImage/UIImageView+WebCache.h>

 NSString *strUrlSting =[d valueForKey:@"Current_RequestUser_Image"];
        strUrlSting =[strUrlSting stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
        NSURL* url = [NSURL URLWithString:strUrlSting];

        [imgView_user1 setImageWithURL:url
                      placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
于 2012-10-18T05:22:41.007 に答える
1

これは の例です。このクラスはAynchImageView with ExampleAysncImageViewからダウンロードできます。

以下のコードのように、このクラスにアクセスできます。

- (UITableViewCell *)tableView:(UITableView *)tableView

           cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        static NSString *CellIdentifier = @"ImageCell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

        if (cell == nil) {
            cell = [[[UITableViewCell alloc]
                  initWithFrame:CGRectZero reuseIdentifier:CellIdentifier]
                  autorelease];
        } else {
        AsyncImageView* oldImage = (AsyncImageView*)
                 [cell.contentView viewWithTag:999];
        [oldImage removeFromSuperview];
        }

        CGRect frame;
        frame.size.width=75; frame.size.height=75;
        frame.origin.x=0; frame.origin.y=0;
        AsyncImageView* asyncImage = [[[AsyncImageView alloc]
                   initWithFrame:frame] autorelease];
        asyncImage.tag = 999;
        NSURL* url = [imageDownload
                   thumbnailURLAtIndex:indexPath.row];
        [asyncImage loadImageFromURL:url];

        [cell.contentView addSubview:asyncImage];

        return cell;
    }

これがお役に立てば幸いです。

于 2012-10-18T05:32:40.383 に答える