Code Monkey home page Code Monkey logo

ajphotopicker's Introduction

介绍

基于AssetsLibrary的照片选取器。
Aaron Swartz

描述

用于代替系统的图片选择器的控件,基于AssetsLibrary方便定制自己的需求,使用UICollectionView进行图片展示;网上也有一些做的很不错的类似控件,而大多数实现过于复杂不方便自己定制,在试用了几款后决定自己写这个控件;目前已经添加了几个自己需要的功能,同时控件在集成使用时也相对简单,几行代码+委托就可以了。

特性

  • 基于AssetsLibrary、UICollectionView。
  • 支持 视频、图片选择。
  • 支持多选、滑动多选、预览。
  • 使用方式简单,便于定制。

用法

弹出图片选择控件

AJPhotoPickerViewController *picker = [[AJPhotoPickerViewController alloc] init];
//最大可选项
picker.maximumNumberOfSelection = 5;
//是否多选
picker.multipleSelection = YES;
//资源过滤
picker.assetsFilter = [ALAssetsFilter allPhotos];
//是否显示空的相册
picker.showEmptyGroups = YES;
//委托(必须)
picker.delegate = self;
//可选过滤
picker.selectionFilter = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
    return YES;
}];

[self presentViewController:picker animated:YES completion:nil];

实现委托

//选择完成
- (void)photoPicker:(AJPhotoPickerViewController *)picker didSelectAssets:(NSArray *)assets;

//点击选中
- (void)photoPicker:(AJPhotoPickerViewController *)picker didSelectAsset:(ALAsset*)asset;

//取消选中
- (void)photoPicker:(AJPhotoPickerViewController *)picker didDeselectAsset:(ALAsset*)asset;

//点击相机按钮相关操作
- (void)photoPickerTapCameraAction:(AJPhotoPickerViewController *)picker;

//取消
- (void)photoPickerDidCancel:(AJPhotoPickerViewController *)picker;

//超过最大选择项时
- (void)photoPickerDidMaximum:(AJPhotoPickerViewController *)picker;

//低于最低选择项时
- (void)photoPickerDidMinimum:(AJPhotoPickerViewController *)picker;

//选择过滤
- (void)photoPickerDidSelectionFilter:(AJPhotoPickerViewController *)picker;

安装

手动安装

  1. 下载 AJPhotoPicker 文件夹内的所有内容。

  2. 将 AJPhotoPicker 内的源文件添加(拖放)到你的工程。

  3. 链接以下 frameworks:

    • UIKit
    • CoreFoundation
    • QuartzCore
    • AssetsLibrary
    • MobileCoreServices
  4. 导入 AJPhotoPickerViewController.h

系统要求

该项目最低支持 iOS 7.0Xcode 7.0

许可证

AJPhotoPicker 使用 MIT 许可证,详情见 LICENSE 文件。

ajphotopicker's People

Contributors

alienjun avatar alienjunx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ajphotopicker's Issues

isSelected always false

[self.indexPathsForSelectedItems containsObject:self.assets[indexPath.row]]; always return false. how can i check indexPathsForSelectedItems contains object?

部分机型读取出来的相册不全

iPhone 6+ 读取的相册不完整,要用手机自带的相册浏览一下后才能获取到该张照片,iPhone 6碰到过刚刚拍的照片不能读取到。6s+,6s,5s都能读取。

20151118,一个小建议

代码很好,那来学习真不错。交互也很漂亮。但是有个问题,就是不能点击预览,稍微有点遗憾

相册读取不全

部分手机读取相册不完整,只能读取新的照片,比如当天拍的,而以前的 或者旧的读取不了。

关于最大选择数的问题

有一个bug,实现了委托,但没有实现photoPickerDidMaximum这个委托方法的时候,控制最大选择数的方法失效。建议把AJPhotoPickerController 346行的return提到if外面。

AJPhotoPickerViewController 的loadView方法会提前调用

在示例代码中单选图片哪里
设置筛选条件不起作用
AJPhotoPickerViewController *picker = [[AJPhotoPickerViewController alloc] init]; picker.assetsFilter = [ALAssetsFilter allPhotos];
因为在AJPhotoPickerViewController的init中调用了sele.view方法

- (instancetype)init {
self = [super init];
if (self) {
self.view.backgroundColor = [UIColor whiteColor];
self.automaticallyAdjustsScrollViewInsets = NO;
_maximumNumberOfSelection = 10;
_minimumNumberOfSelection = 0;
_assetsFilter = [ALAssetsFilter allAssets];
_showEmptyGroups = NO;
_selectionFilter = [NSPredicate predicateWithValue:YES];
}
return self;
}
会导致提前调用loadview,然后调用setupGroupView方法

- (void)loadView {
[super loadView];

`[self setupNavBar];`

[self setupPhotoListView];
[self setupGroupView];
}
在这时候还未设置assetsFilter
应该把init中self.view方法放到viewDidloaded或者loadView中

一点建议

框架不错,有几点建议

  1. 希望基于Photos Framework,Assets Library真的不怎么好用,官方也IMPORTANT里也推荐iOS8之后使用Photos Framework.
  2. 布局其实也可以使用MasonryPureLayout此类的Autolayout框架,毕竟大家都熟悉,但是通过VFL布局再修改有点麻烦.
  3. 相册单选的时候,添加编辑模式.

以上是个人使用时遇到的一些问题,希望框架更新下去,加油.

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.