最近项目中需要使用到图片浏览器,小编跟大家一样,网上搜索一番,一遍下来之后大多不是很满意,于是就想自己写一个,就这样诞生了 XGYPhotoBrowser,对比了大部分主流的(就是在gitHub上start比较多的),使用起来非常简洁方便,不需要创建model,直接URL即可使用,代码的量非常少,普通的图片浏览器只要两行代码就可集成完成。gitHub链接:https://github.com/xuguoyong/XGYPhotoBrowser。效果图如下:

XGYPhotoBrowser 初始化方式
/**
* 初始化方式 1
* @param photoURLArray 图片数组 NSString 或者是 NSURL
* @param currentIndex 当前的图片下标
* @return 图片浏览器
*/
+ (instancetype)browserWithPhotoURLArray:(NSArray*)photoURLArray
currentIndex:(NSUInteger)currentIndex;
/**
* 初始化方式 2
* @param delegate 浏览器的代理
* @param totalPhotoCount 图片总数量
* @param currentIndex 当前的图片下标
* @return 图片浏览器
*/
+ (instancetype)browserWithDelegate:(id<XGYPhotoBrowserDelegate>)delegate
totalPhotoCount:(NSUInteger)totalPhotoCount
currentIndex:(NSUInteger)currentIndex;
/**
* 展示图片浏览器
*/
- (void)showPhotoBroswer;
/**
* 展示图片浏览器在某个控制器
*/
- (void)showPhotoBroswerInViewController:(UIViewController *)viewController;
/**
* 隐藏图片浏览器
*/
- (void)dismissPhotoBroswerWithAnimation:(BOOL)animation;
XGYPhotoBrowser 图片动画模式和loading的动画模式
/**
界面消失的动画
- XGYPhotoBrowserDismissAnimationScale: 缩放动画(类似微信)- 默认
- XGYPhotoBrowserDismissAnimationRotation: 环形动画
- XGYPhotoBrowserDismissAnimationSlide: 垂直下拉动画
- XGYPhotoBrowserDismissAnimationNone: 没有动画(不允许拖拽)
*/
typedef NS_ENUM(NSUInteger, XGYPhotoBrowserDismissAnimation) {
XGYPhotoBrowserDismissAnimationScale,
XGYPhotoBrowserDismissAnimationRotation,
XGYPhotoBrowserDismissAnimationSlide,
XGYPhotoBrowserDismissAnimationNone
};
/**
加载图片的loding的样式
- XGYPhotoBrowserLoadingTypeIndeterminate: 不显示下载进度的loading
- XGYPhotoBrowserLoadingTypeDeterminate: 显示下载进度的loading
*/
typedef NS_ENUM(NSUInteger, XGYPhotoBrowserLoadingType) {
XGYPhotoBrowserLoadingTypeIndeterminate,
XGYPhotoBrowserLoadingTypeDeterminate
};
XGYPhotoBrowser 代理方法
/**
* 返回临时占位图
* @param browser 当前浏览器
* @param index 当前的下标
* @return 返回图片
*/
- (UIImage *)photoBrowser:(XGYPhotoBrowser *)browser replaceImageAtIndex:(NSUInteger)index imageURL:(NSURL *)imageURL;
/**
* 返回大图的URL
* @param browser 图片浏览器
* @param index 当前的下标
* @return 图片URL
*/
- (NSURL *)photoBrowser:(XGYPhotoBrowser *)browser imageURLAtIndex:(NSUInteger)index;
/**
* 对应下标的缩略图所在的View
* @param browser 当前的视图浏览器
* @param index 当前的下标
* @return 返回缩略图所在的View
*/
- (UIView *)photoBrowser:(XGYPhotoBrowser *)browser thumbnailFrameAtIndex:(NSUInteger)index;
/**
* 当前滑动到某一张图片
* @param browser 图片浏览器
* @param index 当前的下标
*/
- (void)photoBrowser:(XGYPhotoBrowser *)browser didScrollPhotoToIndex:(NSUInteger)index;
/**
* 图片浏览器的下标发生改变的时候会调用的回调
* @param browser 当前的浏览器
* @param pageIndex 当前的下标
*/
- (void)photoBrowser:(XGYPhotoBrowser *)browser didChangePageIndex:(NSInteger)pageIndex pageIndexView:(UIView *)pageIndexView;
#pragma mark - customUI
/**
* 返回显示图片页码的 View 默认是label 可以修改文字的颜色和frame
* @param browser 当前的浏览器
* @return 图片页码的View
*/
- (UIView *)photoBrowser:(XGYPhotoBrowser *)browser pageIndexView:(UILabel *)pageIndexView;
#pragma mark - EventClick
/**
* 是否允许点击图片
* @param browser 图片浏览器
* @param index 当前的下标
*/
- (BOOL)photoBrowser:(XGYPhotoBrowser *)browser shouldTapPhotoAtIndex:(NSUInteger)index;
/**
* 点击图片
* @param browser 图片浏览器
* @param index 当前的下标
*/
- (void)photoBrowser:(XGYPhotoBrowser *)browser didTapPhotoAtIndex:(NSUInteger)index;
/**
* 是否允许长按图片
* @param browser 图片浏览器
* @param index 当前的下标
*/
- (BOOL)photoBrowser:(XGYPhotoBrowser *)browser shouldLongPressPhotoAtIndex:(NSUInteger)index;
/**
* 长按图片
* @param browser 图片浏览器
* @param index 当前的下标
*/
- (void)photoBrowser:(XGYPhotoBrowser *)browser didLongPressPhotoAtIndex:(NSUInteger)index;
XGYPhotoBrowser 使用方法
普通浏览器,只要两行代码即可 imageListArray为图片数组,内容为图片URL或者是图片的NSString字符串地址
XGYPhotoBrowser *browser = [XGYPhotoBrowser browserWithPhotoURLArray:imageListArray currentIndex:currentIndex];
[browser showPhotoBroswer];
带动画的视图浏览器 初始化方式修改为代理的方式,只要实现3个代理方法即可实现微信的图片浏览效果,初始化方式如下
XGYPhotoBrowser *browser = [XGYPhotoBrowser browserWithDelegate:self totalPhotoCount: imageListArray.count currentIndex: currentIndex];
[browser showPhotoBroswer];
代理方法
#pragma mark - XGYPhotoBrowserDelegate
/**
* 返回临时占位图
* @param browser 当前浏览器
* @param index 当前的下标
* @return 返回图片
*/
- (UIImage *)photoBrowser:(XGYPhotoBrowser *)browser replaceImageAtIndex:(NSUInteger)index imageURL:(NSURL *)imageURL
{
YYImageCache *cache = [YYWebImageManager sharedManager].cache;
NSString *key = [[YYWebImageManager sharedManager] cacheKeyForURL:imageURL];
return [cache getImageForKey:key];
}
/**
* 返回大图的URL
* @param browser 图片浏览器
* @param index 当前的下标
* @return 图片URL
*/
- (NSURL *)photoBrowser:(XGYPhotoBrowser *)browser imageURLAtIndex:(NSUInteger)index
{
NSString *url = [self.listArray objectAtIndex:index];
return [NSURL URLWithString:url];
}
/**
* 对应下标的缩略图所在的View
* @param browser 当前的视图浏览器
* @param index 当前的下标
* @return 返回缩略图所在的View
*/
- (UIView *)photoBrowser:(XGYPhotoBrowser *)browser thumbnailFrameAtIndex:(NSUInteger)index
{
//注 :微信展开图片和收起图片都是回到同一个位置,要实现该种效果 只要传一个相同的 view 即可
// XGYPhotoCell *listCell = (XGYPhotoCell *)[self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:self.clickIndex inSection:0]];
XGYPhotoCell *listCell = (XGYPhotoCell *)[self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]];
return listCell;
}
网友评论