新手到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行。
答案 0 :(得分:1)
您可以使用图片网址作为密钥来查找缓存的图片:
UIImage *myCachedImage = [[SDImageCache sharedImageCache] imageFromKey:[NSString \
stringWithFormat:@"%@",banURL]];
答案 1 :(得分:0)
我想问题就在于这一行:
[banIconImage setImageWithURL:banURL placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
banImg=[[UIImage alloc]init]; // <-- here: empty image
[banIconImage setImage:banImg]; // <-- here: overriding banURL image
因为你是:
首先,从网址获取图片;
用空的图像覆盖该图像。
请使用此代码:
[banIconImage setImageWithURL:banURL placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
[banEventDetailArray addObject:banIconImage];
即,将检索到的图像添加到数组中,然后再使用它。
您需要跟踪UIImageView
,因为它是SDWebImage
魔法发生的地方。实际上,该视图在获取图像时处理占位符的显示;当图像存在时,它会被替换。
只有在获取实际图像后才能获得image
属性,否则您只能获得占位符。
答案 2 :(得分: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];
在您决定不是您需要的代码之前尝试代码,显然您并不确切知道自己想要什么。如果这是您问题的答案,请将其标记为解决方案。
答案 3 :(得分:0)
您的数组不包含图像对象。相反,它保存指向UIImage对象的指针(引用)。如果你查看你的工作代码,你就有:
imgEventDetail = [[[UIImage alloc] initWithData:data] autorelease];
[banEventDetailArray addObject:imgEventDetail];
使用数据创建并添加imgEventDetail UIImage对象的新实例,然后将其添加到数组中。你需要为你的底层(不工作)代码做同样的事情。
在无效代码中尝试此操作:
[banEventDetailArray addObject:banIconImage.image]; // array automatically retains.
所有假设您使用SDWebImage API正确下载图像。