简介
-
在一般的应用中,会涉及到拍照片的需求。比如个人中心通常会显示头像。可以从相册选一张,也可以调用摄像头拍一张。
-
完成这个需求,可以直接使用系统提供的UIImagePickerController。这是一个控制器,所以直接present就可以了。拍照或者选择图片的结果以delegate的形式提供,根据实际情况,进行压缩、数据传后台等操作就可以了。
第三方库
拍照片,相册取照片
系统提供的基本用用是可以的,不过要做得精美一点,方便一点,或者功能再多一点,那么就要自定义了。
GitHub上有一个第三方库专门做这个的,并且介绍是中文写的,Star也有好几千,可以尝试使用一下。
这个第三方库内部也是采用UIImagePickerController来完成拍照的功能的,
二维码,条形码扫码
-
与Android通用的话,可以选择ZXing和ZBar等第三方库;
-
AVFoundation提供了扫描二维码,条形码的原生支持(AVCaptureDevice),据说效率比ZXing和ZBar等第三方库更高;
-
有一个第三方库,把原生,ZXing和ZBar三种都统筹了一下,很方便。
集成实践
- 这两个库都是使用CocoaPods管理的,引入工程非常方便
# Uncomment the next line to define a global platform for your project
platform :ios, '15.0'
inhibit_all_warnings!
target 'PandaPhoto' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for PandaPhoto
pod 'AFNetworking', '~> 4.0'
pod 'SDWebImage', '~> 5.0'
pod 'MBProgressHUD', '~> 1.2.0'
pod 'Masonry'
pod 'YYModel'
pod 'YYCache'
# 拍照,取照片
pod 'TZImagePickerController'
# 二维码,条形码扫描
pod 'LBXScan/LBXNative','~> 2.5'
pod 'LBXScan/LBXZXing','~> 2.5'
pod 'LBXScan/UI','~> 2.5'
end
LBXScan的ZBar就不需要导入了,各方面都不如ZXing,只要选一个就可以了。
- 按照GitHub官网的介绍,TZImagePickerController能够很方便地使用。
// 使用第三方库TZImagePickerController实现拍照,取照片功能
- (IBAction)pickButtonTouched:(id)sender {
TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:9 delegate:nil];
// You can get the photos by block, the same as by delegate.
// 你可以通过block或者代理,来得到用户选择的照片.
[imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto) {
// photos是照片的数组,不管是选择的,还是拍照来的;
}];
[self presentViewController:imagePickerVc animated:YES completion:nil];
}
-
按照GitHub官网的介绍,LBXScan用不起来。内嵌的LBXScanViewController用不起来。
-
LBXScan提供的Demo到是可以跑起来,但是push的方式并不是很好,大部分都是黑屏,效果很差。
结论
-
TZImagePickerController更新及时,一直有人在维护;如果UI和产品能够接受这种取照片的方式,推荐使用。
-
LBXScan几乎不能用,除非从他的demo中抠出对应的Controller来用。并且这种界面还不一定满足UI的需求。
ZBar和ZXing对iOS来说没什么意义;AVCaptureDevice提供了实际的扫码功能,界面还是自定义来得方便。
并且这个库长久没人维护。所以,这个库不建议使用。 -
拍照片,用UIImagePickerController自己写,自定义内容很少;
-
扫二维码、条形码,用AVCaptureDevice自己写;
-
界面还是自定义比较好,第三方的很难满足需求;
网友评论