Hier ist meine vollständige Code für die Verwendung/Auswahl
// MARK: Camera App
func openCameraApp() {
if UIImagePickerController.availableCaptureModes(for: .rear) != nil {
picker.allowsEditing = false
picker.sourceType = UIImagePickerControllerSourceType.camera
picker.cameraCaptureMode = .photo
picker.modalPresentationStyle = .fullScreen
present(picker,
animated: true,
completion: nil)
} else {
noCamera()
}
}
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)
present(
alertVC,
animated: true,
completion: nil)
}
// MARK: Photos Albums
func showImagePicker() {
picker.allowsEditing = false
picker.sourceType = .photoLibrary
//picker.modalPresentationStyle = .Popover
present(picker,
animated: true,
completion: nil)
picker.popoverPresentationController?.sourceView = self.view
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage
image = chosenImage
self.performSegue(withIdentifier: "ShowEditView", sender: self)
dismiss(animated: true, completion: nil)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
dismiss(animated: false, completion: nil)
}
// MARK: Seque to EditViewController
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "ShowEditView" {
if let vc = segue.destination as? EditViewController {
vc.image = image
//vc.image = images[0]
}
}
}
ignorieren die beiden kommentierten aus Linien - das sind Mine zum Testen Dinge. Dieser Code funktioniert auf allen Geräten, iOS 9+, alle Orientierungen (aber denken Sie daran, dass das iPhone immer im Hochformat angezeigt wird), und ich hatte nie Probleme im Simulator (es hat keine Kamera) noch ein physikalisches Gerät.
Interessant ist eine Sache, die ein Problem verursachen könnte (nicht sicher, ob es SIGABRT wirft) - Ich suche nach einer hinteren Kamera und gebe einen Alarm aus, wenn es nicht existiert. (Keine Überprüfung für die Frontkamera. Ich bin mir nicht einmal sicher, ob irgendetwas außer einem iPod touch keine Frontkamera hat.)
Vergessen Sie auch nicht, zwei Dinge zu Ihrer info.plist hinzuzufügen iOS 10:
<key>NSCameraUsageDescription</key>
<string>Used to capture new image for photo effect</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Used to select an image for photo effect</string>
Sie können setzen, was Sie wollen, in die Beschreibung Tags. Ohne diese wird die App in iOS 10 heruntergefahren und Apple wird Ihre Einreichung ablehnen. Here's ein Link zu mehr Details.
Danke für die Antwort. Entschuldigung, meine ursprüngliche Frage war ein wenig mehrdeutig. Ich erwartete, den Fehler im Simulator zu bekommen, aber nicht auf meinem iPhone. Ich bekomme den gleichen Fehler bei beiden. –
Ich bearbeite meine Antwort mit vollem Code. Wenn das nicht hilfreich ist, lass es mich wissen und ich werde es löschen. Vielen Dank. – dfd
@AlanSpark - Ihr Problem sollte gelöst werden, indem Sie einfach Ihre 'info.plist' Datei aktualisieren, genau wie es @dfd vorgeschlagen hat. Wenn Sie eine einfachere Methode benötigen, kopieren Sie die Schlüssel und fügen Sie sie ein. Geben Sie dann den Wert manuell in die Wertspalte ein, wenn Sie eine neue Zeile in die Datei "info.plist" einfügen. Erstellen Sie beispielsweise eine neue Zeile und fügen Sie 'NSCameraUsageDescription' in die Spalte" Key "ein. Xcode wird es automatisch aktualisieren, um etwas wie "Datenschutz - Kamerazugriff" zu sagen, dann einfach die Beschreibung in die Spalte "Wert" eingeben – Pierce