iOS 具有多个 imageView 输出的相机

iOS Camera with multiple imageView outputs

在我的 FirstVC 中,我了解如何使用 UIImagePickerController,加载相机,拍照,将其显示在 1 个 imageView 中(仍在 FirstVC 中),然后通过 prepareForSegue 将该图像传递到 SecondVC 中的 imageView 以在那边显示。

我需要帮助的是在 FirstVC 中有多个 imageView,这样一旦用户拍摄了第一张图片,它就会加载到第一个 imageView 中,然后第二张图片加载到第二个 imageView,第三个图片到第三个 imageView,第四个图片到第四个图像视图。之后会出现一条警告,提示用户不能再拍摄照片,用户将按下 nextSceneButton 将其带到 SecondVC,后者将显示他们刚刚拍摄的 4 张选定图像。

我一直使用 UIImagePickerController,但我只是熟悉了 AVFoundation。我应该使用 AVFoundation 还是 UIImagePicker 来完成这个任务?

这是我的 UIImagePickerController 代码,在 FirstVC 中只有一个 imageView:

import UIKit

class FirstViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var nextSceneButton: UIButton!
//nextSceneButton is connected in StoryBoards and triggers the segue to the SecondVC


let imagePicker = UIImagePickerController()

var image: UIImage?



  //MARK:- Custom Function
func noCamera(){
        let alertVC = UIAlertController(title: "No Camera", message: "Sorry, this device has no camera", preferredStyle: .Alert)
        let okAction = UIAlertAction(title: "OK", style:.Default, handler: nil)
        alertVC.addAction(okAction)
        presentViewController(alertVC, animated: true, completion: nil)
    }


override func viewDidLoad() {
        super.viewDidLoad()
        imagePicker.delegate = self      
    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

  //MARK:- Buttons

@IBAction func libraryButtonPressed(sender: UIButton) {
        imagePicker.allowsEditing = false
        imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
        presentViewController(imagePicker, animated: true, completion: nil)
    }


@IBAction func photoButtonPressed(sender: UIButton) {

    if (UIImagePickerController.availableCaptureModesForCameraDevice(UIImagePickerControllerCameraDevice.Rear) != nil){
            imagePicker.allowsEditing = false
            imagePicker.sourceType = UIImagePickerControllerSourceType.Camera
            imagePicker.cameraCaptureMode = UIImagePickerControllerCameraCaptureMode.Photo
            imagePicker.cameraDevice = UIImagePickerControllerCameraDevice.Rear
            presentViewController(imagePicker, animated: true, completion: nil)
        }else{
                noCamera()
    }
     }


  //MARK:- ImagePickerController Delegates

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
            let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage
            self.image = chosenImage
            imageView.image = self.image
            dismissViewControllerAnimated(true, completion: nil)
     }


func imagePickerControllerDidCancel(picker: UIImagePickerController) {
            picker.dismissViewControllerAnimated(true, completion: nil)
     }


  //MARK:- Segue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == “fromPhotoVcToSecondVC” {
        let secondVC = segue.destinationViewController as! SecondViewController
        secondVC.image = self.image
        }
     }

}//end class

您可以添加一个计数 属性 并将图像保存在一个数组中:

var count = 0
var imageViews:[UIImageView]

每次你拍一张照片并调用委托加载相应的图像视图:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
        let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage
        self.imageViews[count].image = chosenImage
        count +=1
        dismissViewControllerAnimated(true, completion: nil)
 }

然后,如果所有照片都已拍摄,则提醒用户:

@IBAction func photoButtonPressed(sender: UIButton) {
      if count < imageViews.count {
          //present UiimagePicker
      } else {
          // alert no more pictures allowed
      }
}