【发布时间】:2024-01-01 04:41:01
【问题描述】:
在我的 FirstVC 中,我了解如何使用 UIImagePickerController、加载相机、拍照、将其显示在 1 个 imageView 内(仍在 FirstVC 内),然后通过 prepareForSegue 将该图像传递给 SecondVC 内的一个 imageView 以显示那边。
我需要帮助的是在 FirstVC 中拥有多个 imageView,这样一旦用户拍摄第一张图片,它就会加载到第一个 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
【问题讨论】:
-
不需要使用 AvFoundation 来满足您的需要。只需在 didFinishPickingMediaWithInfo 中增加一个计数器,并在每次调用时加载相应的 Imageview。
标签: ios swift uiimageview avfoundation uiimagepickercontroller