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];

请帮助我找到我错过的内容以及我可能出错的地方。

提前致谢。

更新:我已经替换了第二个代码块中的一行。即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];

您使用数据创建并添加 imgEventDetail UIImage 对象的新实例,然后将其添加到数组中。您需要对底部(不工作)代码执行相同的操作。

在不工作的代码中试试这个:

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

所有这些都假设您的图像是使用 SDWebImage API 正确下载的。

于 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

为什么要设置两次图像?没有意义。

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

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

尝试删除第二个设置,应该只是。

     [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 回答