MWPhotoBrowser
地址:https://github.com/mwaterfall/MWPhotoBrowser
一款可以加载web Image对象的图片游览器,下面介绍它的使用。
1.简单使用总共分两步:
(1) 创建MWPhotoBrowser
要使用initWithDelegate方法,要遵循MWPhotoBrowserDelegate协议
//创建MWPhotoBrowser ,要使用initWithDelegate方法,要遵循MWPhotoBrowserDelegate协议
MWPhotoBrowser *browser = [[MWPhotoBrowser alloc] initWithDelegate:self];
//设置当前要显示的图片
[browser setCurrentPhotoIndex:indexPath.item];
//push到MWPhotoBrowser
[self.navigationController pushViewController:browser animated:YES];
(2) 实现代理
//返回图片个数
- (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser{
return count;
}
//返回图片模型
- (id )photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index{
//创建图片模型
MWPhoto *photo = [MWPhoto photoWithURL:photoUrl];
return photo;
}
2.使用时的注意五个点:
(1) 数据源问题:
self.photos = imageArray; //此处需要注意的是,self.photos 存放的都是MWPhoto 对象,需要把image 和webUrl ,调用如下几个方法,转成MWPhoto 。。如 :
MWPhoto *photo, *thumb;photo = [MWPhoto photoWithImage:image]; 。。。photo = [MWPhoto photoWithImage:image(httpUrl)];
photo.caption = @"此处设置图片标题,显示在屏幕下方";
方法还有:
+ (MWPhoto *)photoWithImage:(UIImage *)image; //加载的image对象
+ (MWPhoto *)photoWithURL:(NSURL *)url; //加载请求web获得的图片
+ (MWPhoto *)photoWithAsset:(PHAsset *)asset targetSize:(CGSize)targetSize; //加载相册图片对象
+ (MWPhoto *)videoWithURL:(NSURL *)url; // Initialise video with no poster image //加载视频对象
在使用的时候每次加载。。会将 image对象,获取web请求的图片。。转换成它自己的模型(MWPhoto)
(2) 自定义photoBrowser的UI
MWPhotoBrowser *browser = [[MWPhotoBrowser alloc]initWithDelegate:self];
browser.displayActionButton =NO;//分享按钮,默认是
browser.displayNavArrows = NO;//左右分页切换,默认否<屏幕下方的左右角标>
browser.displaySelectionButtons = NO;//是否显示选择按钮在图片上,默认否
browser.alwaysShowControls = NO;//控制条件控件 是否显示,默认否
browser.zoomPhotosToFill = NO;//是否全屏,默认是
browser.enableGrid = NO;//是否允许用网格查看所有图片,默认是
browser.enableSwipeToDismiss = NO;
[browser showNextPhotoAnimated:YES];
[browser showPreviousPhotoAnimated:YES];
[browser setCurrentPhotoIndex:0];
[Controller.navigationController pushViewController:browser animated:NO];
(3) 代理方法 这两个必须要实现
- (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser;
- (id )photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index;
(4)附加了好几个其他第三方库,注意项目中三方库的冲突
1 DACirculaProgress
2 MBProgressHUD
3 SDWebImage
(5)关于内部SDWebImage加载大图而导致的内存警告问题:
因为SDWebImage加载图片是没有做瘦身处理的,所以自己加,共3步(本方法也适用其他用SDWebImage内存过大而又不想全部清空内存问题)
首先,在SDWebImage子目录文件UIImage+MultiFormat添加一个方法:
//压缩图片(找到对应位置,直接粘)
+(UIImage *)compressImageWith:(UIImage *)image{
float imageWidth = image.size.width;
float imageHeight = image.size.height;
float width = 640;
float height = image.size.height/(image.size.width/width);
float widthScale = imageWidth /width;
float heightScale = imageHeight /height;
// 创建一个bitmap的context// 并把它设置成为当前正在使用的 contextUIGraphicsBeginImageContext(CGSizeMake(width, height));
if (widthScale > heightScale) {[image drawInRect:CGRectMake(0, 0, imageWidth /heightScale , height)];}
else {[image drawInRect:CGRectMake(0, 0, width , imageHeight /widthScale)];}
// 从当前context中创建一个改变大小后的图片
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
// 使当前的context出堆栈
UIGraphicsEndImageContext();
return newImage;
}
然后,在+ (UIImage *)sd_imageWithData:(NSData *)data方法内找到image = [[UIImage alloc] initWithData:data],在此行代码下面添加代码如下:
if (data.length/1024 > 1024) {image = [self compressImageWith:image];}
最后,当data大于1M的时候做压缩处理。革命尚未成功,还需要一步处理。在SDWebImageDownloaderOperation的connectionDidFinishLoading方法里面的:
UIImage *image = [UIImage sd_imageWithData:self.imageData];
//将等比压缩过的image在赋在转成data赋给self.imageDataNSData *data = UIImageJPEGRepresentation(image, 1);self.imageData = [NSMutableData dataWithData:data];
注意:此处更改后,项目中用到SDWebImage都会随着更改.