with uiimagepickercontrollerdelegate open how example and ios swift ipad uiimagepickercontroller
https://www.dropbox.com/s/pe0yikxsab8u848/ImagePicker-Swift.zip?dl=0

uiimagepickercontrollerdelegate - UIImagePickerController en iPad con IOS9



uiimagepickercontrollerdelegate swift 4 (7)

Desde iOS 9 y Xcode 7, ya no puedo implementar un UIImagePickerController en un iPad (dispositivo y simulador). El siguiente código funciona en el iPad, pero solo antes de iOS 9. Cuando se usa iOS 9+, la imagen presentada (después de que se descarta el UIImagePickerController) es una versión incorrecta de la imagen seleccionada. Sin cambiar el tamaño o recortar, ¿la imagen final es solo la esquina superior derecha de la imagen original? Además de otro problema: si imagePicker.allowsEditing = false, ¿no puede seleccionar imágenes de PhotoLibrary?

@IBAction func photoButton(sender: AnyObject) { imagePicker.allowsEditing = true imagePicker.sourceType = .PhotoLibrary self.presentViewController(imagePicker, animated: false, completion: nil) } func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { if let pickedImage = info[UIImagePickerControllerEditedImage] as? UIImage { self.imageView.image = pickedImage dismissViewControllerAnimated(true, completion: { () -> Void in }) }

Aquí hay un ejemplo de una imagen seleccionada presentada en un UIImagePickerController. (observe cómo la imagen seleccionada se presenta muy pequeña y no tiene el tamaño / ancho completo de la pantalla como antes)

Después de seleccionar el botón de uso dentro del UIImagePickerController, la imagen final es solo la parte superior derecha de la imagen original. ¿Qué estoy haciendo mal o UIImagePickerController está roto en iOS 9?


Consulte la codificación a continuación

@IBAction func photoButton(sender: AnyObject) { if(UIImagePickerController .isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)) { picker!.sourceType = UIImagePickerControllerSourceType.Camera self .presentViewController(picker!, animated: true, completion: nil) } else { let alertWarning = UIAlertView(title:"Warning", message: "You don''t have camera", delegate:nil, cancelButtonTitle:"OK", otherButtonTitles:"") alertWarning.show() } } func openGallary() { picker!.sourceType = UIImagePickerControllerSourceType.PhotoLibrary self.presentViewController(picker!, animated: true, completion: nil) } //PickerView Delegate Methods func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) { picker .dismissViewControllerAnimated(true, completion: nil) imageView.image=info[UIImagePickerControllerOriginalImage] as? UIImage } func imagePickerControllerDidCancel(picker: UIImagePickerController) { println("picker cancel.") }


Debes asegurarte de tener el fotograma correcto para tu vista de imagen y el modo de contenido para tu vista de imagen debe estar ajustado y la imagen devuelta por el selector es del tipo [UIImagePickerControllerOriginalImage]

[imageView setFrame:imageViewRect]; [imageView setContentMode:UIViewContentModeScaleAspectFit];

Rápido:

imageView.setFrame(imageViewRect) imageView.setContentMode(UIViewContentModeScaleAspectFit)

y llegar a la propiedad allowsEditing , no está relacionado con la selección de fotos.

Es un valor booleano que indica si el usuario tiene permiso para editar una imagen fija o película seleccionada.

Si desea seleccionar fotos de la biblioteca de la cámara, debe modificar el tipo de fuente para

picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

Actualizar:

Dice que ha seleccionado una imagen y la muestra en la vista de la imagen. Supongo que tiene una vista de la imagen en la vista, y el marco de la vista de la imagen es igual al marco de la vista. Si el IB es de forma libre, supongo que el tamaño 600x600 para el marco de la vista de imagen en el IB.

si simplemente lo haces:

_startImageView.image=_img;

El resultado será:

Ahora hagamos algunos cambios a la imagen que se mostrará en la vista de imagen:

CGRect scaledRect = AVMakeRectWithAspectRatioInsideRect(_img.size, CGRectMake(0, 0, self.startImageView.frame.size.width, self.startImageView.frame.size.height)); UIGraphicsBeginImageContext(CGSizeMake(_startImageView.frame.size.width,_startImageView.frame.size.height)); [_img drawInRect:scaledRect]; UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); _startImageView.image=scaledImage;

y ahora la imagen será:

La imagen original elegida es del tamaño 640x426, cuando no está escalada .

La imagen original seleccionada tiene un tamaño de 1536x1286 cuando se escala al máximo (con dos dedos de acción de zoom) .

Como puede ver, todavía no hay un gran cambio en la imagen, ¡ es porque la imagen ya está recortada / escalada cuando su imagen recibió la imagen !

Entonces, aunque intentes hacer:

[_img drawInRect:_startImageView.frame];

La imagen no se dibujará según nuestra necesidad, ya que la imagen ya está escalada en ese momento dado que la imagen edited image es la edited image el selector ha elegido.

Solución:

Para solucionar esto, debe seleccionar la imagen original del selector en el método didFinishPickingMediaWithInfo:

info[UIImagePickerControllerOriginalImage];

que te da la imagen:


Este código es relativamente similar a @ pkc456, solo un poco más corto.

Esto funciona perfectamente para mi:

import UIKit class PostImageViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate { @IBOutlet var imageToPost: UIImageView! @IBAction func chooseImage(sender: AnyObject) { var image = UIImagePickerController() image.delegate = self image.sourceType = UIImagePickerControllerSourceType.PhotoLibrary image.allowsEditing = false //or true additional setup required. self.presentViewController(image, animated: true, completion: nil) } func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { self.dismissViewControllerAnimated(true, completion:nil) }

¿Esto funciona?


Este es un error de Apple: http://openradar.appspot.com/radar?id=5032957332946944

Solución actual pésima:

if UIDevice.currentDevice().userInterfaceIdiom == .Pad { imagePicker.allowsEditing = false } else { imagePicker.allowsEditing = true }

Swift 3.0:

if UIDevice.current.userInterfaceIdiom == .pad { }


Estoy trabajando en xcode 7.1 (Swift) y encontré tu código apropiado. También escribí el código a continuación en mi proyecto y está funcionando con éxito.

func showPicker(){ let type = UIImagePickerControllerSourceType.PhotoLibrary if(UIImagePickerController.isSourceTypeAvailable(type)){ let pickerController = UIImagePickerController() pickerController.delegate = self pickerController.sourceType = UIImagePickerControllerSourceType.PhotoLibrary pickerController.allowsEditing = false self.presentViewController(pickerController, animated: true, completion: nil) } } func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!) { let imageView = self.view.viewWithTag(20) as! UIImageView let selectedImage : UIImage = image imageView.image=selectedImage self.dismissViewControllerAnimated(true, completion: nil) }

La única diferencia en su código y mi código es sobre la visibilidad de la instancia de ImagePickerController . Para su referencia, cargo mi código en: https://www.dropbox.com/s/pe0yikxsab8u848/ImagePicker-Swift.zip?dl=0

Mi idea es solo mirar mi código una vez, puede ser que tengas una idea acerca de qué sección del código funciona mal.


Parece que está utilizando IB y el diseño automático, pero ha establecido una restricción correcta. Intenta agregar alguna restricción en tu guión gráfico.


para mí estaba resuelto, mostrando el modo como popover

@IBAction func photoButton(sender: AnyObject) { imagePicker.allowsEditing = true imagePicker.sourceType = .PhotoLibrary let controller = self.imagePicker controller.modalPresentationStyle = UIModalPresentationStyle.Popover controller.modalTransitionStyle = UIModalTransitionStyle.CoverVertical let popover = controller.popoverPresentationController popover?.sourceView = self controller.preferredContentSize = CGSize( width: self.frame.width * 0.6, height: self.frame.height * 0.6 ) popover?.sourceRect = CGRectMake( CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds), 0, 0 ) self.presentViewController(self.imagePicker, animated: true, completion: nil) }