• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

SWIFT-访问iOS相机和照片库

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

复制-在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人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift - JPush极光推送的使用4(根据Tag标签,给同一类别用户发推送) ...发布时间:2022-07-13
下一篇:
swift4.1 系统学习一发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap