如何从 UIImagePickerController 导入图像到新的 VC? Swift
How to import a image to a new VC from UIImagePickerController? Swift
我已经在我的应用程序中添加了一个相机和照片库,但我想要做的是当有人选择相机、拍照并选择它时,我希望它将用户引导到一个新的 viewcontroller 并在那里显示图像而不是按钮所在的当前视图?
到目前为止,在 google 上,我已经设法在关闭相机或库时加载新视图,但现在我似乎无法弄清楚如何将照片也导入新视图也看?!
如果有人能帮忙,那就太好了。
下面是我当前的代码:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func Camera(sender: AnyObject) {
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerControllerSourceType.Camera;
imagePicker.allowsEditing = false
self.presentViewController(imagePicker, animated: true, completion: nil)
}
}
@IBAction func Images(sender: AnyObject) {
let image = UIImagePickerController()
image.delegate = self
image.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
image.allowsEditing = false
self.presentViewController(image, animated: true, completion: nil)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image:UIImage, editingInfo: [String : AnyObject]?) {
self.dismissViewControllerAnimated(true, completion: nil)
let svc = self.storyboard!.instantiateViewControllerWithIdentifier("imageViewer") as! ImageViewController
self.presentViewController(svc, animated: true, completion: nil)
}
}
向您的视图控制器添加一个可选的 属性
class ImageViewController: UIViewController {
var image : UIImage? = nil
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image:UIImage, editingInfo: [String : AnyObject]?) {
self.dismissViewControllerAnimated(true, completion: nil)
let svc = self.storyboard!.instantiateViewControllerWithIdentifier("imageViewer") as! ImageViewController
svc.image = image // here
self.presentViewController(svc, animated: true, completion: nil)
}
根据上面的回答,你试图将图像设置为图像视图,当你应该尝试将图像设置为图像视图的图像时,所以,它应该是:
func viewDidLoad() {
super.viewDidLoad()
// Because the self.image is an optional var, you need to unwrap it
if let image = self.image {
self.imageView.image = self.image
}
}
在您的 ImageViewController
或其他接收 ViewController 中,添加:
var selectedImage: UIImage? = nil
在 didFinishPickingImage
中,将您的代码替换为:
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image:UIImage, editingInfo: [String : AnyObject]?) {
self.dismissViewControllerAnimated(true, completion: nil)
let svc = self.storyboard!.instantiateViewControllerWithIdentifier("imageViewer") as! ImageViewController
svc.selectedImage = image
self.presentViewController(svc, animated: true, completion: nil)
}
在svc
所指的接收ViewController中,添加显示图片的方法:
class ImageViewController: UIViewController {
var selectedImage: UIImage? = nil
var yourImageView = UIImageView()
override func viewDidLoad() {
super.viewDidLoad()
...
yourImageView.frame = view.frame
yourImageView.image = selectedImage
}
...
}
我想提出一点修改建议。
请看一下这个答案:Presenting a modal view controller immediately after dismissing another
func presentImageViewerWithImage(image: UIImage) {
let svc = self.storyboard!.instantiateViewControllerWithIdentifier("imageViewer") as! ImageViewController
svc.image = image //Need to make an UIImage instance variable in new viewController
self.presentViewController(svc, animated: true, completion: nil)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image:UIImage, editingInfo: [String : AnyObject]?) {
self.dismissViewControllerAnimated(false, completion: {
self.presentImageViewerWithImage(image)
})
}
然后在新视图控制器中创建一个 UIImageView
IBOutlet
并向 'ImageView'
显示选定的图像表单选择器
@IBOutlet weak var aImageView: UIImageView!
var image : UIImage?
override func viewDidLoad() {
super.viewDidLoad()
if let image = image {
self.aImageView.image = image
}
}
我已经在我的应用程序中添加了一个相机和照片库,但我想要做的是当有人选择相机、拍照并选择它时,我希望它将用户引导到一个新的 viewcontroller 并在那里显示图像而不是按钮所在的当前视图?
到目前为止,在 google 上,我已经设法在关闭相机或库时加载新视图,但现在我似乎无法弄清楚如何将照片也导入新视图也看?!
如果有人能帮忙,那就太好了。
下面是我当前的代码:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func Camera(sender: AnyObject) {
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerControllerSourceType.Camera;
imagePicker.allowsEditing = false
self.presentViewController(imagePicker, animated: true, completion: nil)
}
}
@IBAction func Images(sender: AnyObject) {
let image = UIImagePickerController()
image.delegate = self
image.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
image.allowsEditing = false
self.presentViewController(image, animated: true, completion: nil)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image:UIImage, editingInfo: [String : AnyObject]?) {
self.dismissViewControllerAnimated(true, completion: nil)
let svc = self.storyboard!.instantiateViewControllerWithIdentifier("imageViewer") as! ImageViewController
self.presentViewController(svc, animated: true, completion: nil)
}
}
向您的视图控制器添加一个可选的 属性
class ImageViewController: UIViewController {
var image : UIImage? = nil
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image:UIImage, editingInfo: [String : AnyObject]?) {
self.dismissViewControllerAnimated(true, completion: nil)
let svc = self.storyboard!.instantiateViewControllerWithIdentifier("imageViewer") as! ImageViewController
svc.image = image // here
self.presentViewController(svc, animated: true, completion: nil)
}
根据上面的回答,你试图将图像设置为图像视图,当你应该尝试将图像设置为图像视图的图像时,所以,它应该是:
func viewDidLoad() { super.viewDidLoad()
// Because the self.image is an optional var, you need to unwrap it
if let image = self.image {
self.imageView.image = self.image
}
}
在您的 ImageViewController
或其他接收 ViewController 中,添加:
var selectedImage: UIImage? = nil
在 didFinishPickingImage
中,将您的代码替换为:
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image:UIImage, editingInfo: [String : AnyObject]?) {
self.dismissViewControllerAnimated(true, completion: nil)
let svc = self.storyboard!.instantiateViewControllerWithIdentifier("imageViewer") as! ImageViewController
svc.selectedImage = image
self.presentViewController(svc, animated: true, completion: nil)
}
在svc
所指的接收ViewController中,添加显示图片的方法:
class ImageViewController: UIViewController {
var selectedImage: UIImage? = nil
var yourImageView = UIImageView()
override func viewDidLoad() {
super.viewDidLoad()
...
yourImageView.frame = view.frame
yourImageView.image = selectedImage
}
...
}
我想提出一点修改建议。
请看一下这个答案:Presenting a modal view controller immediately after dismissing another
func presentImageViewerWithImage(image: UIImage) {
let svc = self.storyboard!.instantiateViewControllerWithIdentifier("imageViewer") as! ImageViewController
svc.image = image //Need to make an UIImage instance variable in new viewController
self.presentViewController(svc, animated: true, completion: nil)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image:UIImage, editingInfo: [String : AnyObject]?) {
self.dismissViewControllerAnimated(false, completion: {
self.presentImageViewerWithImage(image)
})
}
然后在新视图控制器中创建一个 UIImageView
IBOutlet
并向 'ImageView'
@IBOutlet weak var aImageView: UIImageView!
var image : UIImage?
override func viewDidLoad() {
super.viewDidLoad()
if let image = image {
self.aImageView.image = image
}
}