2016-10-01 57 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庫加載:當我選擇它只是崩潰的圖像 –

相關問題