Ich schreibe meine erste iOS-Anwendung (nur iPhone) mit Swift. In der Hauptanwendungsansicht sollte der Benutzer das Bild aus der Fotogalerie auswählen können.
Ich habe den folgenden Beispielcode von ViewController.swift gefunden :
class ViewController: UIImagePickerController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
var imagePickerController = UIImagePickerController()
imagePickerController.delegate = self
imagePickerController.sourceType = UIImagePickerControllerSourceType.SavedPhotosAlbum
imagePickerController.allowsEditing = true
self.presentViewController(imagePickerController, animated: true, completion: { imageP in
})
}
func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!) {
let selectedImage : UIImage = image
println(selectedImage)
}
}
und haben die folgende View Controller-Szene -
View Controller
- Top Layout Guide
- Bottom Layout Guide
- View
- Image View
First Responder
Exit
Aber wenn ich die App starte, wird nur ein schwarzer Bildschirm angezeigt. Was mache ich falsch? Ein weiterer Beispielcode, den ich gefunden habe, befindet sich in Objective-C, was mir nicht hilft.
Antworten:
Wenn Sie nur möchten, dass der Benutzer ein Bild mit UIImagePickerController auswählt, verwenden Sie diesen Code:
import UIKit class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate { @IBOutlet var imageView: UIImageView! @IBOutlet var chooseBuuton: UIButton! var imagePicker = UIImagePickerController() @IBAction func btnClicked() { if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum){ print("Button capture") imagePicker.delegate = self imagePicker.sourceType = .savedPhotosAlbum imagePicker.allowsEditing = false present(imagePicker, animated: true, completion: nil) } } func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!){ self.dismiss(animated: true, completion: { () -> Void in }) imageView.image = image } }
quelle
Attempt to present <UIImagePickerController: 0x7fdb84029800> on <MyApp.ViewController: 0x7fdb838360a0> whose view is not in the window hierarchy!
. Soll ich der Szene etwas hinzufügen?Vollständige Copy-Paste-Arbeitsbildauswahl für Swift 4 basierend auf @ user3182143 Antwort:
import Foundation import UIKit class ImagePickerManager: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate { var picker = UIImagePickerController(); var alert = UIAlertController(title: "Choose Image", message: nil, preferredStyle: .actionSheet) var viewController: UIViewController? var pickImageCallback : ((UIImage) -> ())?; override init(){ super.init() } func pickImage(_ viewController: UIViewController, _ callback: @escaping ((UIImage) -> ())) { pickImageCallback = callback; self.viewController = viewController; let cameraAction = UIAlertAction(title: "Camera", style: .default){ UIAlertAction in self.openCamera() } let galleryAction = UIAlertAction(title: "Gallery", style: .default){ UIAlertAction in self.openGallery() } let cancelAction = UIAlertAction(title: "Cancel", style: .cancel){ UIAlertAction in } // Add the actions picker.delegate = self alert.addAction(cameraAction) alert.addAction(galleryAction) alert.addAction(cancelAction) alert.popoverPresentationController?.sourceView = self.viewController!.view viewController.present(alert, animated: true, completion: nil) } func openCamera(){ alert.dismiss(animated: true, completion: nil) if(UIImagePickerController .isSourceTypeAvailable(.camera)){ picker.sourceType = .camera self.viewController!.present(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 openGallery(){ alert.dismiss(animated: true, completion: nil) picker.sourceType = .photoLibrary self.viewController!.present(picker, animated: true, completion: nil) } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { picker.dismiss(animated: true, completion: nil) } //for swift below 4.2 //func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { // picker.dismiss(animated: true, completion: nil) // let image = info[UIImagePickerControllerOriginalImage] as! UIImage // pickImageCallback?(image) //} // For Swift 4.2+ func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { picker.dismiss(animated: true, completion: nil) guard let image = info[.originalImage] as? UIImage else { fatalError("Expected a dictionary containing an image, but was provided the following: \(info)") } pickImageCallback?(image) } @objc func imagePickerController(_ picker: UIImagePickerController, pickedImage: UIImage?) { } }
Rufen Sie es von Ihrem Viewcontroller aus wie folgt auf:
ImagePickerManager().pickImage(self){ image in //here is the image }
Vergessen Sie auch nicht, die folgenden Schlüssel in Ihre aufzunehmen
info.plist
:<key>NSCameraUsageDescription</key> <string>This app requires access to the camera.</string> <key>NSPhotoLibraryUsageDescription</key> <string>This app requires access to the photo library.</string>
quelle
imagePickerController
durch diese ersetzen , damit es funktioniert. Vielen Dank!func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage pickImageCallback?(image) picker.dismiss(animated: true, completion: nil) }
Für Swift 3:
Zuerst müssen Sie den folgenden Schlüssel in info.plist hinzufügen:
<key>NSPhotoLibraryUsageDescription</key> <string>This app requires access to the photo library.</string>
Ihr View-Controller muss den folgenden Protokollen entsprechen:
UIImagePickerControllerDelegate
,UINavigationControllerDelegate
:class ImagePickerViewController: UIViewController,UIImagePickerControllerDelegate, UINavigationControllerDelegate {}
Sie müssen das UIImage deklarieren, das Sie zum Binden des zurückgegebenen / ausgewählten Bildes verwenden:
@IBOutlet weak var myImageView: UIImageView! @IBoutlet weak var upLoadImageBtn:UIImage! let imagePicker = UIImagePickerController()
Legen Sie den pickerImage-Delegaten als ViewController fest:
imagePicker.delegate = self
Für die Schaltfläche zum Hochladen müssen Sie einen Link zu dem folgenden Bild erstellen, um die Aktion auszulösen und die Bildauswahl anzuzeigen:
@IBAction func upLoadImageBtnPressed(_ sender: AnyObject) { imagePicker.allowsEditing = false imagePicker.sourceType = .photoLibrary /* The sourceType property wants a value of the enum named UIImagePickerControllerSourceType, which gives 3 options: UIImagePickerControllerSourceType.PhotoLibrary UIImagePickerControllerSourceType.Camera UIImagePickerControllerSourceType.SavedPhotosAlbum */ present(imagePicker, animated: true, completion: nil) }
Ihr View-Controller muss die Delegierungsmethoden für die Bildauswahldelegierten implementieren:
// MARK: - ImagePicker Delegate func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage { myImageView.contentMode = .scaleAspectFit myImageView.image = pickedImage } /* Swift Dictionary named “info”. We have to unpack it from there with a key asking for what media information we want. We just want the image, so that is what we ask for. For reference, the available options are: UIImagePickerControllerMediaType UIImagePickerControllerOriginalImage UIImagePickerControllerEditedImage UIImagePickerControllerCropRect UIImagePickerControllerMediaURL UIImagePickerControllerReferenceURL UIImagePickerControllerMediaMetadata */ dismiss(animated: true, completion: nil) } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { dismiss(animated: true, completion:nil) }
quelle
Ich werde Ihnen die bestmögliche Codierung für die Auswahl des Bildes geben
func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { var alert:UIAlertController=UIAlertController(title: "Choose Image", message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet) var cameraAction = UIAlertAction(title: "Camera", style: UIAlertActionStyle.Default) { UIAlertAction in self.openCamera() } var gallaryAction = UIAlertAction(title: "Gallary", style: UIAlertActionStyle.Default) { UIAlertAction in self.openGallary() } var cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel) { UIAlertAction in } // Add the actions picker?.delegate = self alert.addAction(cameraAction) alert.addAction(gallaryAction) alert.addAction(cancelAction) self.presentViewController(alert, animated: true, completion: nil) } func openCamera() { 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.") }
Einen schönen Tag noch:-)
quelle
@IBAction func chooseProfilePicBtnClicked(sender: AnyObject) { let alert:UIAlertController=UIAlertController(title: "Choose Image", message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet) let cameraAction = UIAlertAction(title: "Camera", style: UIAlertActionStyle.Default) { UIAlertAction in self.openCamera() } let gallaryAction = UIAlertAction(title: "Gallary", style: UIAlertActionStyle.Default) { UIAlertAction in self.openGallary() } let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel) { UIAlertAction in } // Add the actions picker.delegate = self alert.addAction(cameraAction) alert.addAction(gallaryAction) alert.addAction(cancelAction) self.presentViewController(alert, animated: true, completion: nil) } func openCamera(){ if(UIImagePickerController .isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)){ picker.sourceType = UIImagePickerControllerSourceType.Camera self .presentViewController(picker, animated: true, completion: nil) }else{ let alert = UIAlertView() alert.title = "Warning" alert.message = "You don't have camera" alert.addButtonWithTitle("OK") alert.show() } } func openGallary(){ picker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary self.presentViewController(picker, animated: true, completion: nil) } //MARK:UIImagePickerControllerDelegate func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]){ picker .dismissViewControllerAnimated(true, completion: nil) imageViewRef.image=info[UIImagePickerControllerOriginalImage] as? UIImage } func imagePickerControllerDidCancel(picker: UIImagePickerController){ print("picker cancel.") }
quelle
In Swift 5 müssen Sie dies tun
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { @IBOutlet var imageView: UIImageView! var imagePicker = UIImagePickerController() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } @IBAction func setPicture(_ sender: Any) { if UIImagePickerController.isSourceTypeAvailable(.photoLibrary){ imagePicker.delegate = self imagePicker.sourceType = .photoLibrary imagePicker.allowsEditing = false present(imagePicker, animated: true, completion: nil) } } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { picker.dismiss(animated: true, completion: nil) if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage { imageView.image = image } } }
quelle
XCODE 10.1 / SWIFT 4.2:
Erforderliche Berechtigungen hinzufügen (andere erwähnt)
Fügen Sie diese Klasse Ihrer Ansicht hinzu:
import UIKit import Photos import Foundation class UploadImageViewController: UIViewController, UIImagePickerControllerDelegate , UINavigationControllerDelegate { @IBOutlet weak var imgView: UIImageView! let imagePicker = UIImagePickerController() override func viewDidLoad() { super.viewDidLoad() checkPermission() imagePicker.delegate = self imagePicker.allowsEditing = false imagePicker.sourceType = .photoLibrary } @IBAction func btnSetProfileImageClickedCamera(_ sender: UIButton) { } @IBAction func btnSetProfileImageClickedFromGallery(_ sender: UIButton) { self.selectPhotoFromGallery() } func selectPhotoFromGallery() { self.present(imagePicker, animated: true, completion: nil) } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { if let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage { self.imgView.contentMode = .scaleAspectFit self.imgView.image = pickedImage } dismiss(animated: true, completion: nil) } func imagePickerControllerDidCancel(_ picker: UIImagePickerController){ print("cancel is clicked") } func checkPermission() { let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus() switch photoAuthorizationStatus { case .authorized: print("Access is granted by user") case .notDetermined: PHPhotoLibrary.requestAuthorization({ (newStatus) in print("status is \(newStatus)") if newStatus == PHAuthorizationStatus.authorized { /* do stuff here */ print("success") } }) print("It is not determined until now") case .restricted: // same same print("User do not have access to photo album.") case .denied: // same same print("User has denied the permission.") } } }
quelle
Führen Sie diese Schritte aus, um Bilder aus der Fotobibliothek schnell zu codieren:
var pkcrviewUI = UIImagePickerController() if UIImagePickerController .isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary) { pkcrviewUI.sourceType = UIImagePickerControllerSourceType.PhotoLibrary pkcrviewUI.allowsEditing = true pkcrviewUI.delegate = self [self .presentViewController(pkcrviewUI, animated: true , completion: nil)] }
quelle
Ich weiß, dass diese Frage ein Jahr alt ist, aber hier ist ein ziemlich einfacher Code (meistens aus diesem Tutorial ), der für mich gut funktioniert:
import UIKit class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { @IBOutlet weak var imageView: UIImageView! var imagePicker = UIImagePickerController() override func viewDidLoad() { super.viewDidLoad() self.imagePicker.delegate = self } @IBAction func loadImageButtonTapped(sender: AnyObject) { print("hey!") self.imagePicker.allowsEditing = false self.imagePicker.sourceType = .SavedPhotosAlbum self.presentViewController(imagePicker, animated: true, completion: nil) } func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) { if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage { self.imageView.contentMode = .ScaleAspectFit self.imageView.image = pickedImage } dismissViewControllerAnimated(true, completion: nil) } func imagePickerControllerDidCancel(picker: UIImagePickerController) { self.imagePicker = UIImagePickerController() dismissViewControllerAnimated(true, completion: nil) }
quelle
Für Swift 4
Dieser Code funktioniert für mich !!
import UIKit class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate { @IBOutlet var imageView: UIImageView! @IBOutlet var chooseBuuton: UIButton! var imagePicker = UIImagePickerController() override func viewDidLoad() { super.viewDidLoad() imagePicker.delegate = self } @IBAction func btnClicked() { if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum) { print("Button capture") imagePicker.sourceType = .savedPhotosAlbum; imagePicker.allowsEditing = false self.present(imagePicker, animated: true, completion: nil) } } @objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage imageView.image = chosenImage dismiss(animated: true, completion: nil) } }
quelle
Die obigen Antworten lösen natürlich das Hauptproblem.
Beim Starten des Fotoalbums war ich in Swift 3.0 abgestürzt, weil Info.plist diese Flags nicht hatte:
Datenschutz - Beschreibung der Verwendung der Fotobibliothek -> NSPhotoLibraryUsageDescription
Datenschutz - Beschreibung der Kameranutzung -> NSCameraUsageDescription
[
Bitte fügen Sie sie hinzu, wenn Sie auf ein ähnliches Problem stoßen.
Vielen Dank !
quelle
Hier ist eine einfache Möglichkeit, dies zu tun:
Aber zuerst müssen Sie (Datenschutz - Beschreibung der Verwendung der Fotobibliothek) in die info.plist einfügen, und Sie sollten eine Schaltfläche und eine UIImageView in Ihrem viewController haben.
Erstellen Sie dann einen Ausgang der UIImageView (in diesem Code heißt der Ausgang myImage) und eine Aktion der Schaltfläche (ich habe die in meinen Code importierende Aktion aufgerufen).
import UIKit class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { override func viewDidLoad() { super.viewDidLoad() } @IBOutlet weak var myImage: UIImageView! @IBAction func importing(_ sender: Any) { let Picker = UIImagePickerController() Picker.delegate = self Picker.sourceType = .photoLibrary self.present(Picker, animated: true, completion: nil) Picker.allowsEditing = true Picker.mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary)! } func imagePickerController(_ picker: UIImagePickerController,didFinishPickingMediaWithInfo info: [String : Any]) { let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage //1 myImage.contentMode = .scaleAspectFit //2 myImage.image = chosenImage //3 dismiss(animated:true, completion: nil) //4 } }
quelle
Falls Sie keine separate Schaltfläche haben möchten, finden Sie hier eine andere Möglichkeit. Hängt eine Geste an imageView selbst an, bei der beim Tippen auf das Bild eine Warnung mit zwei Optionen angezeigt wird. Sie haben die Möglichkeit, entweder aus der Galerie / Fotobibliothek zu wählen oder die Warnung abzubrechen.
import UIKit import CoreData class AddDetailsViewController: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate { @IBOutlet weak var imageView: UIImageView! var picker:UIImagePickerController? = UIImagePickerController() @IBAction func saveButton(sender: AnyObject) { let managedContext = (UIApplication.sharedApplication().delegate as? AppDelegate)!.managedObjectContext let entity = NSEntityDescription.entityForName("Person", inManagedObjectContext: managedContext) let person = Person(entity: entity!, insertIntoManagedObjectContext: managedContext) person.image = UIImageJPEGRepresentation(imageView.image!, 1.0) //imageView.image do { try person.managedObjectContext?.save() //people.append(person) } catch let error as NSError { print("Could not save \(error)") } } override func viewDidLoad() { super.viewDidLoad() let tapGesture = UITapGestureRecognizer(target: self, action: #selector(AddDetailsViewController.tapGesture(_:))) imageView.addGestureRecognizer(tapGesture) imageView.userInteractionEnabled = true picker?.delegate = self // Do any additional setup after loading the view. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func tapGesture(gesture: UIGestureRecognizer) { let alert:UIAlertController = UIAlertController(title: "Profile Picture Options", message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet) let gallaryAction = UIAlertAction(title: "Open Gallary", style: UIAlertActionStyle.Default) { UIAlertAction in self.openGallary() } let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel) { UIAlertAction in self.cancel() } alert.addAction(gallaryAction) alert.addAction(cancelAction) self.presentViewController(alert, animated: true, completion: nil) } func openGallary() { picker!.allowsEditing = false picker!.sourceType = UIImagePickerControllerSourceType.PhotoLibrary presentViewController(picker!, animated: true, completion: nil) } func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage { imageView.contentMode = .ScaleAspectFit imageView.image = pickedImage } dismissViewControllerAnimated(true, completion: nil) } func cancel(){ print("Cancel Clicked") } }
Um der Frage mehr hinzuzufügen, wurde die Logik zum Speichern von Bildern in CoreData implementiert.
quelle
Klicken Sie auf die Schaltfläche und öffnen Sie die Bildergalerie und stellen Sie das Bild in Imageview Swift 3.0 ein
Fügen Sie drei Delegaten hinzu: UIImagePickerControllerDelegate, UIPopoverControllerDelegate, UINavigationControllerDelegate
var picker:UIImagePickerController?=UIImagePickerController() @IBOutlet var imgPhoto: UIImageView! override func viewDidLoad() { super.viewDidLoad() picker?.delegate=self } @IBAction func btnAddPhotoClicked(_ sender: UIButton) { openGallary() } func openGallary() { picker!.allowsEditing = false picker!.sourceType = UIImagePickerControllerSourceType.photoLibrary present(picker!, animated: true, completion: nil) } //MARK:- ImagePicker Controller Delegate //MARK:- func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { dismiss(animated: true, completion: nil) } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { if let chosenImage = info[UIImagePickerControllerOriginalImage] as? UIImage { imgPhoto.contentMode = .scaleToFill imgPhoto.image = chosenImage } else{ print("Something went wrong") } self.dismiss(animated: true, completion: nil) }
quelle
Hier nur antworten, um zu erwähnen:
info[UIImagePickerControllerEditedImage]
ist wahrscheinlich die, die Sie in den meisten Fällen verwenden möchten.Davon abgesehen sind die Antworten hier umfassend.
quelle
Probieren Sie dieses aus, es ist einfach, ein Bild mit UIImagePickerControllerDelegate aufzunehmen
@objc func masterAction(_ sender: UIButton) { if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum){ print("Button capture") imagePicker.delegate = self imagePicker.sourceType = .savedPhotosAlbum; imagePicker.allowsEditing = false self.present(imagePicker, animated: true, completion: nil) } print("hello i'm touch \(sender.tag)") } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { dismiss(animated: true, completion: nil) } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { if let chosenImage = info[UIImagePickerControllerOriginalImage] as? UIImage { print("Get Image \(chosenImage)") ImageList.insert(chosenImage, at: 0) ArrayList.insert("", at: 0) Collection_Vw.reloadData() } else{ print("Something went wrong") } self.dismiss(animated: true, completion: nil) }
quelle
Wenn Sie nur ein normales Bild auswählen möchten, können Sie den folgenden Code verwenden, um sicherzustellen, dass das ausgewählte Bild kein Panoramabild ist.
let picker = UIImagePickerController() func photoFromLibrary() { self.picker.allowsEditing = true self.picker.sourceType = .photoLibrary //picker.mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary)! self.present(self.picker, animated: true, completion: nil) } func shootPhoto() { if UIImagePickerController.isSourceTypeAvailable(.camera) { self.picker.allowsEditing = true self.picker.sourceType = UIImagePickerControllerSourceType.camera self.picker.cameraCaptureMode = .photo self.picker.modalPresentationStyle = .fullScreen self.present(self.picker,animated: true,completion: nil) } } //Image picker delegate func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let str = "\(info["UIImagePickerControllerOriginalImage"]!)" let s = str.slice(from: "{", to: "}") if let arr = s?.components(separatedBy: ","){ if arr.count >= 2 { if Int(arr[0])! > 11000 { picker.dismiss(animated:true, completion: nil) self.makeToast("Invalid Image!!!") return } } } } if let image = info[UIImagePickerControllerOriginalImage] as? UIImage{ self.UserImageView.image = image } picker.dismiss(animated:true, completion: nil) } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { picker.dismiss(animated: true, completion: nil) }
quelle
Xcode 10, Swift 4.2
Unten finden Sie eine leicht optimierte Version der Implementierung. Dies ist in Swift 4.2 und ich habe es auch getestet.
Den vollständigen Code für ViewController finden Sie hier. Bitte beachten Sie, dass Sie ein IBOutlet (imageView) und eine IBAction (didTapOnChooseImageButton) definieren müssen, die auch im Storyboard definiert und verbunden sind. Hoffe das hilft.
import UIKit class ImagePickViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate { var imagePicker = UIImagePickerController() @IBOutlet weak var imageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } @IBAction func didTapOnChooseImageButton(_ sender: Any) { let alert:UIAlertController=UIAlertController(title: "Choose Image", message: nil, preferredStyle: UIAlertController.Style.actionSheet) let cameraAction = UIAlertAction(title: "Camera", style: UIAlertAction.Style.default) { UIAlertAction in self.openCamera(UIImagePickerController.SourceType.camera) } let gallaryAction = UIAlertAction(title: "Gallary", style: UIAlertAction.Style.default) { UIAlertAction in self.openCamera(UIImagePickerController.SourceType.photoLibrary) } let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel) { UIAlertAction in } // Add the actions imagePicker.delegate = self as UIImagePickerControllerDelegate & UINavigationControllerDelegate alert.addAction(cameraAction) alert.addAction(gallaryAction) alert.addAction(cancelAction) self.present(alert, animated: true, completion: nil) } func openCamera(_ sourceType: UIImagePickerController.SourceType) { imagePicker.sourceType = sourceType self.present(imagePicker, animated: true, completion: nil) } //MARK:UIImagePickerControllerDelegate func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { imageView.image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage imagePicker.dismiss(animated: true, completion: nil) } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { print("imagePickerController cancel") } }
quelle
Das kannst du hier gerne machen
var avatarImageView = UIImageView() var imagePicker = UIImagePickerController() func takePhotoFromGallery() { imagePicker.delegate = self imagePicker.sourceType = .savedPhotosAlbum imagePicker.allowsEditing = true present(imagePicker, animated: true) } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { if let pickedImage = info[.originalImage] as? UIImage { avatarImageView.contentMode = .scaleAspectFill avatarImageView.image = pickedImage } self.dismiss(animated: true) }
Hoffe das war hilfreich
quelle
Für Swift 3.4.1 funktioniert dieser Code:
implements class AddAdvertisementViewController : UINavigationControllerDelegate, UIImagePickerControllerDelegate, UIActionSheetDelegate var imagePicker = UIImagePickerController() var file :UIImage! //action sheet tap on image func tapOnButton(){ let optionMenu = UIAlertController(title: nil, message: "Add Photo", preferredStyle: .actionSheet) let galleryAction = UIAlertAction(title: "Gallery", style: .default, handler:{ (alert: UIAlertAction!) -> Void in self.addImageOnTapped() }) let cameraAction = UIAlertAction(title: "Camera", style: .default, handler:{ (alert: UIAlertAction!) -> Void in self.openCameraButton() }) let cancleAction = UIAlertAction(title: "Cancel", style: .cancel, handler:{ (alert: UIAlertAction!) -> Void in print("Cancel") }) optionMenu.addAction(galleryAction) optionMenu.addAction(cameraAction) optionMenu.addAction(cancleAction) self.present(optionMenu, animated: true, completion: nil) } func openCameraButton(){ if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) { imagePicker = UIImagePickerController() imagePicker.delegate = self imagePicker.sourceType = UIImagePickerControllerSourceType.camera; imagePicker.allowsEditing = true self.present(imagePicker, animated: true, completion: nil) } } func addImageOnTapped(){ if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary){ imagePicker.delegate = self imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary; imagePicker.allowsEditing = true self.present(imagePicker, animated: true, completion: nil) } } //picker pick image and store value imageview func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]){ if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { file = image imgViewOne.image = image imagePicker.dismiss(animated: true, completion: nil); } }
quelle
@IBAction func ImportImage(_ sender: Any) { let image = UIImagePickerController() image.delegate = self image.sourceType = UIImagePickerController.SourceType.photoLibrary image.allowsEditing = false self.present(image, animated: true) { //After it is complete } } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage { myimage.image = image } else{ // } self.dismiss(animated: true, completion: nil) do { try context.save() } catch { print("Could not save. \(error), \(error.localizedDescription)") } }
Hinzufügen
UINavigationControllerDelegate
,UIImagePickerControllerDelegate
Delegaten in der Klassendefinitionquelle