Giter VIP home page Giter VIP logo

xyphotokit's Introduction

XYPhotoKit

基于PhotoKit开发的照片获取方式,支持多选单选(对应的UI略有不同),支持iCloud获取相册等

使用方式

详情见demo查看

相册获取方式

属性 说明
Controller
XYPhotoMultiImagePicker NavigationController,承载两个VC栈、相册相关参数初始化工作及 delegate & datasource
XYPhotoAlbumListController 系统和用户的相册列表(tableview),根据CLPhotoMultiPickerStartPosition来确定初始展示哪个VC界面
XYPhotoAlbumDetailController 某个相册的详情(collectionView),单选多选照片的不同交互主要完成于此,可进入大图预览
XYPhotoPreviewViewController 大图预览(XYHorizontalScrollView)

用法

XYPhotoMultiImagePicker *multiImagePicker = [[XYPhotoMultiImagePicker alloc] init];
multiImagePicker.pickerDelegate = self;
multiImagePicker.pickerDataSource = self;
multiImagePicker.mediaType = PHAssetMediaTypeImage; // 支持图片和视屏
multiImagePicker.maxNumberOfAssets = 9; // 最多选择九张照片
multiImagePicker.assetCollectionViewColumnCount = 4; // 获取
multiImagePicker.startPosition = CLPhotoMultiPickerStartPositionAlbums; // 相册列表开始进入
multiImagePicker.allowNetRequestIfiCloud = YES; // 支持iCloud网络获取
[self presentViewController:multiImagePicker animated:YES completion:nil];


#pragma mark - XYPhotoMultiImagePickerDelegate, XYPhotoMultiImagePickerDataSource

- (void)multiImagePicker:(XYPhotoMultiImagePicker *)multiImagePicker selectedAssets:(NSArray<PHAsset *> *)assets
{
	_selectedAssets = assets;

	NSLog(@"%@", @(assets.count));
}

- (NSArray<PHAsset *> *)multiImagePickerLoadPresetSelectedAssets
{
	return _selectedAssets;
}

相机获取方式

属性 说明
Controller
XYPhotoMultiCameraPicker NavigationController,承载XYPhotoCameraController、相机相关参数初始化工作及 delegate & datasource
XYPhotoCameraController 基于ImagePickerController,需要有相机和相册两个权限做交互,可进入大图预览
XYPhotoPreviewViewController 大图预览(XYHorizontalScrollView)

用法

XYPhotoMultiCameraPicker *camera = [[XYPhotoMultiCameraPicker alloc] init];
camera.pickerDelegate = self;
camera.pickerDataSource = self;
camera.maxNumberOfAssets = 9; // 最多选择九张照片
camera.allowNetRequestIfiCloud = YES; // 支持iCloud网络获取
[self presentViewController:camera animated:YES completion:nil];

#pragma mark - XYPhotoMultiCameraPickerDelegate, XYPhotoMultiCameraPickerDataSource

- (void)multiCameraPicker:(XYPhotoMultiCameraPicker *)multiImagePicker selectedAssets:(NSArray<PHAsset *> *)assets
{
	_selectedAssets = assets.copy;
	NSLog(@"%@",assets);
}

- (NSArray<PHAsset *> *)multiCameraPickerLoadPresetSelectedAssets
{
	return _selectedAssets;
}

综述

以上获取都是PHAsset对象,PHAsset 非常灵活,详见文档,同步异步请求、支持网络、请求progress等等可以查看 PHImageRequestOptions

例如:支持网络获取(如果是本地就直接本地获取)asset对象大小为targetSize的图片 闭包中可能会有多次回调(本地图片)越来越高清,当网络请求时非特殊情况下不可直接获取原图尺寸CGSizeMake(asset.pixelWidth, asset.pixelHeight)

PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
options.networkAccessAllowed = YES;

_imageRequestId = [self.imageManager requestImageForAsset:asset
                                               targetSize:_targetSize
                                              contentMode:PHImageContentModeAspectFit
                                                  options:options
                                            resultHandler:^(UIImage *result, NSDictionary *info) {
	BOOL downloadFinined = ![[info objectForKey:PHImageCancelledKey] boolValue]
							&& ![info objectForKey:PHImageErrorKey]
							&& ![[info objectForKey:PHImageResultIsDegradedKey] boolValue];
    if (downloadFinined) { self.imageRequestId = 0; }
    if (result) { self.imageView.image = result; }
}];

todo & upgrade

  • 视频播放
  • 拆分类的层级(比如接入LocalImagePicker等等)
  • 完善其他获取照片的拓展方法 & 工具(视频压缩、图片压缩,指定相册图片写入等等)
  • 添加iCloud加载的请求等待提示
  • 大图预览添加过渡动画,视频播放、消失添加fade
  • 大图预览改换使用pageController
  • 持久化&有效性验证:对PHAsset持久化存储只需储存 photoAsset.localIdentifier的唯一标识,验证对象是否还存在于相册中(即有效性)需要对唯一标识做遍历对比

xyphotokit's People

Contributors

zhipingyang avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.