MWPhotoBrowser-ADS 1.0.0

MWPhotoBrowser-ADS 1.0.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新发布2016 年 12 月

Andrew Shen 维护。



 
依赖于
MBProgressHUD~> 0.9
DACircularProgress~> 2.3
SDWebImage!= 3.7.2, ~> 3.7
 

  • Wanqi Shen

MWPhotoBrowser

Flattr this git repo

一个简单的 iOS 相册和视频浏览器,可选网格视图、标题和选择。

MWPhotoBrowser 可以通过提供 UIImage 对象、PHAsset 对象或资源库资产的 URL、网络图片/视频或本地文件的方式,显示一个或多个图片或视频。相册浏览器无缝处理从网络下载和缓存图片。图片可以缩放和平移,并可选择(可自定义)显示标题。

此浏览器还可以用来自由用户选择一个或多个图片,使用网格或主图片视图均可。

Alt    Alt    Alt    Alt    Alt    Alt

支持 iOS 7+。所有字符串均可本地化,因此可以在支持多语言的应用中使用。

使用方法

BWPhotoBrowser 设计成在导航控制器中展示。只需设置代理(它必须遵守 MWPhotoBrowserDelegate 协议),并实现所需的两个代理方法,即可将照片浏览器提供的数据以 MWPhoto 对象的形式呈现。您可以通过提供 UIImage 对象、PHAsset 对象或包含文件路径、在线图像或资产库中的资产的 URL 来创建 MWPhoto 对象。

MWPhoto 对象为您处理缓存、文件管理、下载网络图像以及各种优化。如果您想使用自己的数据模型来表示照片,可以确保您的模型符合 MWPhoto 协议。然后您可以自己处理缓存管理、下载等。有关更多信息,请参阅 MWPhotoProtocol.h

以下代码片段示例了如何实现照片浏览器。项目内还有一个简单的演示应用程序。

// Create array of MWPhoto objects
self.photos = [NSMutableArray array];

// Add photos
[photos addObject:[MWPhoto photoWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"photo2l" ofType:@"jpg"]]]];
[photos addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@"http://farm4.static.flickr.com/3629/3339128908_7aecabc34b.jpg"]]];
[photos addObject:[MWPhoto photoWithURL:[NSURL URLWithString:@"http://farm4.static.flickr.com/3590/3329114220_5fbc5bc92b.jpg"]]];

// Add video with poster photo
MWPhoto *video = [MWPhoto photoWithURL:[NSURL URLWithString:@"https://scontent.cdninstagram.com/hphotos-xpt1/t51.2885-15/e15/11192696_824079697688618_1761661_n.jpg"]];
video.videoURL = [[NSURL alloc] initWithString:@"https://scontent.cdninstagram.com/hphotos-xpa1/t50.2886-16/11200303_1440130956287424_1714699187_n.mp4"];
[photos addObject:video];

// Create browser (must be done each time photo browser is
// displayed. Photo browser objects cannot be re-used)
MWPhotoBrowser *browser = [[MWPhotoBrowser alloc] initWithDelegate:self];

// Set options
browser.displayActionButton = YES; // Show action button to allow sharing, copying, etc (defaults to YES)
browser.displayNavArrows = NO; // Whether to display left and right nav arrows on toolbar (defaults to NO)
browser.displaySelectionButtons = NO; // Whether selection buttons are shown on each image (defaults to NO)
browser.zoomPhotosToFill = YES; // Images that almost fill the screen will be initially zoomed to fill (defaults to YES)
browser.alwaysShowControls = NO; // Allows to control whether the bars and controls are always visible or whether they fade away to show the photo full (defaults to NO)
browser.enableGrid = YES; // Whether to allow the viewing of all the photo thumbnails on a grid (defaults to YES)
browser.startOnGrid = NO; // Whether to start on the grid of thumbnails instead of the first photo (defaults to NO)
browser.autoPlayOnAppear = NO; // Auto-play first video

// Customise selection images to change colours if required
browser.customImageSelectedIconName = @"ImageSelected.png";
browser.customImageSelectedSmallIconName = @"ImageSelectedSmall.png";

// Optionally set the current visible photo before displaying
[browser setCurrentPhotoIndex:1];

// Present
[self.navigationController pushViewController:browser animated:YES];

// Manipulate
[browser showNextPhotoAnimated:YES];
[browser showPreviousPhotoAnimated:YES];
[browser setCurrentPhotoIndex:10];

然后响应所需的代理方法

- (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser {
    return self.photos.count;
}

- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index {
    if (index < self.photos.count) {
        return [self.photos objectAtIndex:index];
    }
    return nil;
}

只需将浏览器包裹在一个新的导航控制器中并展示它,就可以通过模态方式展示浏览器。演示应用程序允许您在两种展示方式之间切换。

视频

您可以通过提供带 videoURL 的标准 MWPhoto 图像对象、提供一个 PHAsset 对象或将 URL 指向内容库中的视频来实现MWPhoto对象中视频的展示。

// Video with URL including poster photo
MWPhoto *video = [MWPhoto photoWithURL:[NSURL URLWithString:@"https://scontent.cdninstagram.com/hphotos-xpt1/t51.2885-15/e15/11192696_824079697688618_1761661_n.jpg"]];
video.videoURL = [NSURL URLWithString:@"https://scontent.cdninstagram.com/hphotos-xpa1/t50.2886-16/11200303_1440130956287424_1714699187_n.mp4"];

// Video with PHAsset
MWPhoto *video = [MWPhoto photoWithAsset:asset targetSize:[UIScreen mainScreen].bounds.size]; // Example sizing

// Video with ALAsset
MWPhoto *video = [MWPhoto photoWithURL:asset.defaultRepresentation.url];
if ([asset valueForProperty:ALAssetPropertyType] == ALAssetTypeVideo) {
    photo.videoURL = asset.defaultRepresentation.url;
}

// Video with no poster photo
MWPhoto *video = [MWPhoto videoWithURL:[NSURL URLWithString:@"https://scontent.cdninstagram.com/hphotos-xfa1/t50.2886-16/11237510_945154435524423_2137519922_n.mp4"]];

// Video grid thumbnail
MWPhoto *videoThumb = [MWPhoto photoWithURL:[NSURL URLWithString:@"https://scontent.cdninstagram.com/hphotos-xaf1/t51.2885-15/s150x150/e15/11240463_963135443745570_1519872157_n.jpg"]];
videoThumb.isVideo = YES;

// Video grid thumbnail for video with no poster photo
MWPhoto *videoThumb = [MWPhoto new];
videoThumb.isVideo = YES;

网格

为了正确展示缩略图网格,您必须确保将属性 enableGrid 设置为 YES,并实现以下代理方法

- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser thumbPhotoAtIndex:(NSUInteger)index;

照片浏览器还可以通过启用 startOnGrid 属性在网格上启动。

操作

默认情况下,如果动作按钮可见,则图像(如果存在则包括标题)会被发送到 UIActivityViewController。

您可以通过以下代理方法提供自定义动作

- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser actionButtonPressedForPhotoAtIndex:(NSUInteger)index {
    // Do your thing!
}

照片标题

您可以通过设置特定照片上的 caption 属性来简单显示照片标题

MWPhoto *photo = [MWPhoto photoWithURL:[NSURL URLWithString:@"http://farm4.static.flickr.com/3629/3339128908_7aecabc34b.jpg"]];
photo.caption = @"Campervan";

如果没有设置标题属性,则不会显示标题。

自定义标题

默认情况下,标题是一个简单的黑色透明视图,其中包含一个以白色显示照片标题的标签。如果您想实现自己的标题视图,请按照以下步骤操作

  1. 可选地,使用 MWPhoto 的子类来存储比简单标题字符串更多的数据。
  2. 扩展 MWCaptionView 并重写 -setupCaption-sizeThatFits:(以及您认为合适的任何其他 UIView 方法)以布局您自己的视图并设置其大小。有关更多信息,请参阅 MWCaptionView.h
  3. 实现 -photoBrowser:captionViewForPhotoAtIndex: MWPhotoBrowser 代理方法(如下所示)。

自定义标题视图的示例代理方法

- (MWCaptionView *)photoBrowser:(MWPhotoBrowser *)photoBrowser captionViewForPhotoAtIndex:(NSUInteger)index {
    MWPhoto *photo = [self.photos objectAtIndex:index];
    MyMWCaptionViewSubclass *captionView = [[MyMWCaptionViewSubclass alloc] initWithPhoto:photo];
    return captionView;
}

选择

照片浏览器可以显示复选框,让用户选择一张或多张照片。要使用此功能,只需启用 displaySelectionButtons 属性,并实现以下代理方法

- (BOOL)photoBrowser:(MWPhotoBrowser *)photoBrowser isPhotoSelectedAtIndex:(NSUInteger)index {
    return [[_selections objectAtIndex:index] boolValue];
}

- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index selectedChanged:(BOOL)selected {
    [_selections replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:selected]];
}

安装

MWPhotoBrowser 通过 CocoaPods 可用。要安装它,只需在 Podfile 中添加以下行:

pod "MWPhotoBrowser"

使用方法

要运行示例项目,请先克隆仓库,然后从 Example 目录运行 pod install

然后,将照片浏览器导入到您的源文件中(或者如果您使用 Swift 并不使用 CocoaPods 中的框架,则导入到您的桥接头中)。

#import "MWPhotoBrowser.h"

如果您使用 Swift 和框架,则只需将浏览器导入到您的 Swift 源文件中即可。

import MWPhotoBrowser

作者

Michael Waterfall, [email protected]

许可证

MWPhotoBrowser 基于 MIT 许可证。有关更多信息,请参阅 LICENSE 文件。

说明

演示照片由 Oliver Waters 提供。