我有一系列包含图像完整路径的图像。 我将图像存储在文档目录中。 问题是当我向下滚动图像时,集合视图中的加载时间很慢,因此滚动也很差。 Referencing此代码使其更快。
但问题是图像没有显示在单元格中。 我的集合视图代码是
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
AlbumImageCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"AlbumImageCell" forIndexPath:indexPath];
cell.albumImage.image=nil;
cell.layer.shouldRasterize = YES;
cell.layer.rasterizationScale = [UIScreen mainScreen].scale;
if (cell == nil) {
cell = [[[NSBundle mainBundle] loadNibNamed:@"AlbumImageCell" owner:self options:nil] objectAtIndex:0];
}
NSString *path=[documentImage objectAtIndex:indexPath.row];
NSURL *url = [NSURL URLWithString:path];
// note that this can be a web url or file url
ImageRequest *request = [[ImageRequest alloc] initWithURL:url];
UIImage *image = [request cachedResult];
if (image) {
UIImageView *imageView = (UIImageView *)[cell viewWithTag:127];
imageView.image = image;
cell.albumImage.image=image;
} else {
[request startWithCompletion:^(UIImage *image, NSError *error) {
if (image && [[collectionView indexPathsForVisibleItems] containsObject:indexPath]) {
[self.album_ImageView reloadItemsAtIndexPaths:@[indexPath]];
}
}];
}
return cell;
}
我在UIImage中得到了null。 请帮我解决这个问题。
答案 0 :(得分:1)
NSString *path=[documentImage objectAtIndex:indexPath.row];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:path isDirectory:NO];
UIImageView *sample=[[UIImageView alloc] init];
[sample sd_setImageWithURL:fileURL placeholderImage:[UIImage imageNamed:@"PHOTO.png"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
if (image == nil) {
UIImage *localImage = [UIImage imageNamed:@"PHOTO.png"];
if (localImage == nil) {
localImage = [UIImage imageNamed:@"PHOTO.png"];
}
sample.image = localImage;
}
cell.albumImage.image=image;
}];
答案 1 :(得分:-1)
好的,你可以使用它,
如果你想在UICollectionView中快速加载图像使用' EGOImageView',EGOImageView快速下载图像并且滚动灵活,请参考以下链接下载EGOImageView Loader,
下载ZIP文件,然后整合代码中的以下类
如果集成所有类,则将类导入UICollectionView类,
#import "EGOImageView/EGOImageView.h"
#import "EGOImageLoader/EGOImageLoader.h"
如果导入类,则声明下面给出的EGOImageView示例,
@property (retain, nonatomic) EGOImageView *stickerImageView;
在下面的代码中使用&#39 ;-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath'获取网址并粘贴代码,
NSURL *url = [NSURL URLWithString:path];
if (url)
[cell.stickerImageView setImageURL:url];
else
[cell.stickerImageView setImage:@"placeholderImage"];
为我工作......
答案 2 :(得分:-1)
我强烈建议使用此库,使用NSURL
据我所知,它是最常用的异步图像下载器之一,可能使用了一些内部缓存机制。您需要根据要显示图像的UI元素使用导入不同的类别标题。在这种情况下,您需要包含
#import <SDWebImage/UIImageView+WebCache.h>
请找到我在下面显示的示例代码,我用它为集合视图单元格中的每个单元格设置图像视图。
NSURL *imageURL = [NSURL URLWithString:@"http://www.you-url-goes-here.png"];
[_sampleImageView sd_setImageWithURL:imageURL placeholderImage:[UIImage defaultPlaceHolderImage] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
if (image == nil) {
UIImage *localImage = [UIImage someLocalImage];
if (localImage == nil) {
localImage = [UIImage defaultPlaceHolderImage];
}
_sampleImageView.image = localImage;
}
}];
答案 3 :(得分:-1)
Buddy只需使用AFNetworking库。它易于使用,您的图像将很容易获取,它将自动缓存,您的收藏不会卡住。您将获得滚动的高性能 从这里下载https://github.com/AFNetworking/AFNetworking
UIImageView+AFNetworking.h
使用上述类别获取图片