1

iPhone初心者はこちら。RSSフィードから取得した表示する画像があります。私は現在、以下のコードを使用していますが、ビュー内の要素の読み込みが遅くなります:

  for(int i=0; i<[bannerArray count]; i++){

       NSString *bannerImagestr = [[bannerArray objectAtIndex:i] BannerImage];
       bannerImagestr  = [ bannerImagestr  stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];

      NSURL *banURL= [NSURL URLWithString:bannerImagestr];



       NSData *data = [NSData dataWithContentsOfURL:banURL];

       imgEventDetail = [[[UIImage alloc] initWithData:data] autorelease];


       [banEventDetailArray addObject:imgEventDetail];

 }NSLog(@"the  banEventDetailArray is %@",banEventDetailArray);

SDWebImage api を使って読み込みを高速化しようとしましたが、画像を取得できませんでした。私が使用しているコードは以下のとおりです。

   for(int i=0; i<[bannerArray count]; i++){

       NSString *bannerImagestr = [[bannerArray objectAtIndex:i] BannerImage];
       bannerImagestr  = [ bannerImagestr  stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];

      NSURL *banURL= [NSURL URLWithString:bannerImagestr];


       [banIconImage setImageWithURL:banURL placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

      banImg=banIconImage.image;//<<<-------- updated here banImg is an instance of UIImage

       [banEventDetailArray addObject:banImg];

 }NSLog(@"the  banEventDetailArray is %@",banEventDetailArray);

パラメータとして取る以下のコードでこの配列を設定しているためbanEventDetailArray、 の形式で が必要ですUIImage(UIImage *)

 [eventsdetailroundedButtonType setBackgroundImage:[banEventDetailArray objectAtIndex:numTimerTicks] forState:UIControlStateNormal];

私が見逃していたものと、どこが間違っていたのかを見つけるのを手伝ってください.

前もって感謝します。

更新: 2 番目のコード ブロックの行を置き換えました。つまり、banImg=banIconImage.image; 11行目。

4

4 に答える 4

1

画像の URL をキーとして使用して、キャッシュされた画像を見つけることができます。

UIImage *myCachedImage = [[SDImageCache sharedImageCache] imageFromKey:[NSString \
stringWithFormat:@"%@",banURL]];
于 2012-08-03T10:49:06.043 に答える
0

配列は画像オブジェクトを保持していません。代わりに、UIImageオブジェクトへのポインター(参照)を保持します。作業コードを見ると、次のようになっています。

imgEventDetail = [[[UIImage alloc] initWithData:data] autorelease];

[banEventDetailArray addObject:imgEventDetail];

データを含むimgEventDetailUIImageオブジェクトの新しいインスタンスを作成して追加し、それを配列に追加します。一番下の(機能していない)コードについても同じことをする必要があります。

動作しないコードでこれを試してください:

 [banEventDetailArray addObject:banIconImage.image];  // array automatically retains.

SDWebImageAPIを使用して画像が正しくダウンロードされていることを前提としています。

于 2012-06-02T09:01:12.220 に答える
0

問題は次の行にあると思います。

   [banIconImage setImageWithURL:banURL placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

   banImg=[[UIImage alloc]init];         // <-- here: empty image
   [banIconImage setImage:banImg];       // <-- here: overriding banURL image

あなたは次のとおりです。

  1. まず、URL から画像を取得します。

  2. そのイメージを空のイメージでオーバーライドします。

代わりに、次のコードを使用してください。

   [banIconImage setImageWithURL:banURL placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
   [banEventDetailArray addObject:banIconImage];

つまり、取得した画像を配列に追加し、後でそれを使用します。

魔法が起こるUIImageView場所であるため、追跡する必要があります。SDWebImage実際、そのビューは、画像がフェッチされている間、プレースホルダーの表示を処理します。画像がそこにある場合、それは置き換えられます。

image実際の画像がフェッチされた後にのみプロパティを取得できます。それ以外の場合は、プレースホルダーのみを取得します。

于 2012-06-02T07:46:11.850 に答える
0

なぜ画像を2回設定しているのですか?意味がありません。

 [banIconImage setImageWithURL:banURL placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

              banImg=[[UIImage alloc]init];
   [banIconImage setImage:banImg];

2 番目の設定を削除してみてください。

     [banIconImage setImageWithURL:banURL placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

編集: ロジックはまだ意味がありません。の画像をオブジェクトとして配列に追加しようとしている可能性がUIImageViewあります。つまり、コードはおそらく次のようになります。

NSString *bannerImagestr = [[bannerArray objectAtIndex:i] BannerImage];
bannerImagestr  = [ bannerImagestr  stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];

NSURL *banURL= [NSURL URLWithString:bannerImagestr];
[banIconImage setImageWithURL:banURL placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

[banEventDetailArray addObject:banIconImage.image];

必要なものではないと判断する前に、コードを試してみてください。明らかに、何が必要か正確にはわかりません。これがあなたの質問に対する答えである場合は、それを解決策としてマークしてください。

于 2012-06-02T07:47:22.653 に答える