2016-10-01 73 views
1

如何使用相机拍摄照片或从照片库中选取图像以便能够在imageView中显示图像?如何在Swift中加载来自相机或照片库的图像

任何帮助,将不胜感激。

+0

我已为你找出答案,但你得到的所有downvotes,因为这是没有网站“代码为你”。您必须提供代码,我们正在帮助您找到错误并改善您的代码。所以下次尝试谷歌解决方案,并获得帮助,如果你卡住了。现在:我已经为你发布了一个功能齐全的选项。玩得开心 –

+0

我明白,这不是一个让人为我做这项工作的地方,我只是要求我可以从哪里开始。我不希望任何人为我写出来,尽管我很欣赏你发布的答案。 –

+1

我不想冒犯你或任何配偶。只是想告诉你,为什么你会得到所有的投票。你得到我的赞成,所以它不会太坏,如果我的工作可以帮助你,我很高兴你的问题得到解答,所以你可以检查它。如果您需要进一步的帮助,请告诉我。 –

回答

19

我用你想要的视图控制器中调用雨燕3

// 
// DSCameraHandler.swift 
// 
// Created by David Seek on 23.04.17. 
// Copyright © 2016 David Seek. All rights reserved. 
// 

import MobileCoreServices 
import UIKit 

class DSCameraHandler: NSObject { 

    private let imagePicker = UIImagePickerController() 
    private let isPhotoLibraryAvailable = UIImagePickerController.isSourceTypeAvailable(.photoLibrary) 
    private let isSavedPhotoAlbumAvailable = UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum) 
    private let isCameraAvailable = UIImagePickerController.isSourceTypeAvailable(.camera) 
    private let isRearCameraAvailable = UIImagePickerController.isCameraDeviceAvailable(.rear) 
    private let isFrontCameraAvailable = UIImagePickerController.isCameraDeviceAvailable(.front) 
    private let sourceTypeCamera = UIImagePickerControllerSourceType.camera 
    private let rearCamera = UIImagePickerControllerCameraDevice.rear 
    private let frontCamera = UIImagePickerControllerCameraDevice.front 

    var delegate: UINavigationControllerDelegate & UIImagePickerControllerDelegate 
    init(delegate_: UINavigationControllerDelegate & UIImagePickerControllerDelegate) { 
     delegate = delegate_ 
    } 

    func getPhotoLibraryOn(_ onVC: UIViewController, canEdit: Bool) { 

     if !isPhotoLibraryAvailable && !isSavedPhotoAlbumAvailable { return } 
     let type = kUTTypeImage as String 

     if isPhotoLibraryAvailable { 
      imagePicker.sourceType = .photoLibrary 
      if let availableTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary) { 
       if availableTypes.contains(type) { 
        imagePicker.mediaTypes = [type] 
        imagePicker.allowsEditing = canEdit 
       } 
      } 
     } else if isPhotoLibraryAvailable { 
      imagePicker.sourceType = .savedPhotosAlbum 
      if let availableTypes = UIImagePickerController.availableMediaTypes(for: .savedPhotosAlbum) { 
       if availableTypes.contains(type) { 
        imagePicker.mediaTypes = [type] 
       } 
      } 
     } else { 
      return 
     } 

     imagePicker.allowsEditing = canEdit 
     imagePicker.delegate = delegate 
     onVC.present(imagePicker, animated: true, completion: nil) 
    } 

    func getCameraOn(_ onVC: UIViewController, canEdit: Bool) { 

     if !isCameraAvailable { return } 
     let type1 = kUTTypeImage as String 

     if isCameraAvailable { 
      if let availableTypes = UIImagePickerController.availableMediaTypes(for: .camera) { 
       if availableTypes.contains(type1) { 
        imagePicker.mediaTypes = [type1] 
        imagePicker.sourceType = sourceTypeCamera 
       } 
      } 

      if isRearCameraAvailable { 
       imagePicker.cameraDevice = rearCamera 
      } else if isFrontCameraAvailable { 
       imagePicker.cameraDevice = frontCamera 
      } 
     } else { 
      return 
     } 

     imagePicker.allowsEditing = canEdit 
     imagePicker.showsCameraControls = true 
     imagePicker.delegate = delegate 
     onVC.present(imagePicker, animated: true, completion: nil) 
    } 
} 

以下为

extension ViewController: UINavigationControllerDelegate, UIImagePickerControllerDelegate { 

    func thisIsTheFunctionWeAreCalling() { 
     let camera = DSCameraHandler(delegate_: self) 
     let optionMenu = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) 
     optionMenu.popoverPresentationController?.sourceView = self.view 

     let takePhoto = UIAlertAction(title: "Take Photo", style: .default) { (alert : UIAlertAction!) in 
      camera.getCameraOn(self, canEdit: true) 
     } 
     let sharePhoto = UIAlertAction(title: "Photo Library", style: .default) { (alert : UIAlertAction!) in 
      camera.getPhotoLibraryOn(self, canEdit: true) 
     } 
     let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (alert : UIAlertAction!) in 
     } 
     optionMenu.addAction(takePhoto) 
     optionMenu.addAction(sharePhoto) 
     optionMenu.addAction(cancelAction) 
     self.present(optionMenu, animated: true, completion: nil) 
    } 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 

     let image = info[UIImagePickerControllerEditedImage] as! UIImage 

     // image is our desired image 

     picker.dismiss(animated: true, completion: nil) 
    } 
} 
+1

很好的答案David thx分享 – Drew

+0

确定队友,不客气 –

+0

你的代码工作正常,除非从canEdit库加载:当我选择它只是崩溃的图像 –

相关问题