SDWebImage加载图片在cell上显示混乱
在使用,SDWebImage加载图片的时候,出现图片加载混乱,具体情况是
1> 从服务器获取数据,如果返回的数组有数据即图片地址,则没有问题,如果数组为空那么,这个空数组展示的cell则会出现图片加载紊乱。
2> 我用的SDWebImage加载图片的方法是:[backgImgView sd_setImageWithURL:[NSURL URLWithString:propertyImgs[i]] placeholderImage:[UIImage imageNamed:[Utils imageNameStr:@"PlaceHolder"]]];
具体使用到的函数:
for (int i = 0; i < propertyImgs.count; i++) {
UITapGestureRecognizer *backgImgViewTapGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(backgImgViewTapGRAction:)];
backgImgViewTapGR.numberOfTapsRequired = 1;
// backgImgViewTapGR.numberOfTouchesRequired = 1;
UIImageView *backgImgView = [[UIImageView alloc] init];
backgImgView.userInteractionEnabled = YES;
[backgImgView addGestureRecognizer:backgImgViewTapGR];
[backgImgView sd_setImageWithURL:[NSURL URLWithString:propertyImgs[i]] placeholderImage:[UIImage imageNamed:[Utils imageNameStr:@"PlaceHolder"]]];
backgImgView.frame = CGRectMake(i*Kwidth, 0, Kwidth, scrollContainerView.frame.size.height);//i*Kwidth
[scrollContainerView addSubview:backgImgView];
lastImgView = backgImgView;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
题主这个问题让我很疑惑,题主写的这个列表视图,可能使用了用
tableView
,在cell中嵌套了ScrollView
,所以我觉得题主可能是在做一个Cell可以横向滑动的滚动tableView,如果真是这样的话,题主这段加载UIImageView的代码可能是在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法里,代码篇幅有限,不知道题主有没有在每次执行这段代码前,移除scrollContainerView
中旧的ImageView
。UITableViewCell是有复用机制的,可以有效节省内存开销。所谓的复用机制,就是我们使用的
生成的cell,其实不一定是一个新实例,例如你当前屏幕总共可以显示3个cell(如你的图),那你的内存中,可能只有4个cell实例,在不停的循环调用。
所以当你的服务器出现返回空数组的情况时,for循环不执行,但是
scrollview
中的别的数组的图还在内存中并未清除,所以出现了你所谓的混乱。如果返回不空,你新创建的UIImageView覆盖了旧的,所以看起来是对的,但是内存在不断增加没有释放。
解决办法:你自己想吧,我也不清楚你完整的代码,只是猜测一下原因。提亮点建议
1 你的
scrollContainerView
在for循环前面,把所有UIImageView
移除掉。2 更好的办法是,好好研究一下复用机制,参考著名的
nimbus
框架的NIViewRecycler类,或者直接拿来用,把你的UIImageView
也复用了。可能需要花点时间,但弄明白以后绝对值得。ps:这个问题跟
SDWebImage
半毛钱关系都没有。试下用带 completed 的方法
图片加载完之后调用一下 cell 的 layoutSubviews
我用过类似的Swift的框架,也有类似的问题,不过稍微一下就又会现实正确的图片。