SWIFT-访问iOS相机和照片库

复制-在Swift中粘贴解决方案

访问iOS相机和照片库可能是您在我们构建的几乎每个应用程序中都能找到的最常见功能之一。 因此,我们必须确保正确执行操作,并确保有一个随时可以重用的自定义类。

在本教程中,我将向您展示如何在Swift中创建自定义类,并在需要时随时使用它。 如果您懒于阅读整个教程,可以在本文底部下载一个GIST文件。 我将命名为CameraHandler.swift

访问iOS相机和照片库

我将从创建两个函数开始,第一个函数将命名为camera(),第二个函数将命名为photoLibrary()。 在这两种情况下,我们都使用UIImagePickerController类,我们要做的就是将sourceType属性更改为适当的属性。

相机()
func camera()
{
if UIImagePickerController.isSourceTypeAvailable(.camera){
let myPickerController = UIImagePickerController()
myPickerController.delegate = self;
myPickerController.sourceType = .camera
currentVC.present(myPickerController, animated: true, completion: nil)
}

}
photoLibrary()
func photoLibrary()
{

if UIImagePickerController.isSourceTypeAvailable(.photoLibrary){
let myPickerController = UIImagePickerController()
myPickerController.delegate = self;
myPickerController.sourceType = .photoLibrary
currentVC.present(myPickerController, animated: true, completion: nil)
}
}

如您所见,sourceType更改为.camera.photoLibrary类型。 我们将需要UIImagePickerControllerDelegateUINavigationControllerDelegate,以便我们拦截用户选择的图像。 我将在下面解释有关currentVC属性。

创建UIActionSheet

接下来,我们要做的是创建一个函数,该函数将在一个简单的UIActionSheet中向用户呈现这两个选项。

showActionSheet()
func showActionSheet(vc: UIViewController) {
currentVC = vc
let actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)

actionSheet.addAction(UIAlertAction(title: "Camera", style: .default, handler: { (alert:UIAlertAction!) -> Void in
self.camera()
}))

actionSheet.addAction(UIAlertAction(title: "Gallery", style: .default, handler: { (alert:UIAlertAction!) -> Void in
self.photoLibrary()
}))

actionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))

vc.present(actionSheet, animated: true, completion: nil)
}

这是显示iOS相机和照片库所需的唯一函数。 它显示了具有两个选项的简单UIActionSheet。 另外,我们传递了一个名为vc的参数,该参数将传递给currentVC私有属性。 我们这样做是为了直接从类内部处理控制器的表示。

注意:如果设备不支持相机或照片库,则按任何选项都不会发生任何事情。 例如,在模拟器上测试相机功能。

委托方法

在文件末尾,我们将创建一个extension ,并将调用属于UIImagePickerControllerDelegate的委托方法didFinishPickingMediaInfoimagePickerControllerDidCancel

extension CameraHandler: UIImagePickerControllerDelegate, UINavigationControllerDelegate{
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
currentVC.dismiss(animated: true, completion: nil)
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
self.imagePickedBlock?(image)
}else{
print("Something went wrong")
}
currentVC.dismiss(animated: true, completion: nil)
}
}

现在,我们可以从照片库中获取所选择的图像,或者从相机中获取所捕获的图像。 为了使事情更简单明了 ,我创建了一个名为imagePickedBlock()的闭包,它将在需要的地方为我们提供所选择的图像。 这是您将需要的所有属性。

static let shared = CameraHandler()

fileprivate var currentVC: UIViewController!

//MARK: Internal Properties
var imagePickedBlock: ((UIImage) -> Void)?

如何使用?

现在我们需要使用它来创建类。 这种类的优点是易于重用。

CameraHandler.shared.showActionSheet(vc: self)
CameraHandler.shared.imagePickedBlock = { (image) in
/* get your image here */
}

正是本教程向您展示了如何在Swift 3中访问iOS相机和照片库,我真的希望它对您有所帮助。 如果您有任何疑问,请在评论部分中分享此帖子,以作为支持或评论。

完整的GIST文件

就是本教程的内容,如果对您有帮助,请please或分享这个故事,以便其他人可以找到它。 感谢您的关注! 🚀
查看我最新的项目:
阅读我在Medium上撰写的更多文章:
订阅我的时事通讯:

From: https://hackernoon.com/swift-access-ios-camera-and-photo-library-dc1dbe0cdd76

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值