Вот мой полный код для использования/выбора
// 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]
}
}
}
Игнорируйте две закомментированные линии - это те шахты для тестирования вещей. Этот код работает на всех устройствах iOS 9+, все ориентации (но помните, что iPhone всегда отображается портрет), и у меня никогда не было проблем ни в симуляторе (у него нет камеры), ни в физическом устройстве.
Особый интерес представляет одна вещь, которая может вызвать проблему (не уверен, что она выбрасывает SIGABRT). Я проверяю заднюю камеру и выставляю предупреждение, если оно не существует. (Нет проверки на переднюю камеру, хотя я даже не уверен, что если у iPod touch нет передней камеры).
Кроме того, не забудьте добавить две вещи к вашему info.plist для 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>
Вы можете поместить все, что хотите, в теги описания. Без них приложение будет закрыто в iOS 10, и Apple отклонит ваше представление. Here's ссылка на более подробную информацию.
Спасибо за ответ. Извините, мой оригинальный вопрос был немного неоднозначным. Я ожидал получить ошибку в симуляторе, но не на моем iPhone. Я получаю ту же ошибку на обоих. –
Я отредактирую свой ответ с полным кодом. Если это не поможет, сообщите мне, и я удалю его. Благодарю. – dfd
@AlanSpark - Вы должны решить проблему, просто обновив файл 'info.plist' так же, как предлагалось @dfd. Если вам нужен более простой способ сделать это, скопируйте и вставьте ключи, а затем вручную введите значение в столбце значений, когда вы вставляете новую строку в свой файл 'info.plist'. Например, создайте новую строку и вставьте 'NSCameraUsageDescription' в столбец« Ключ ». Xcode автоматически обновит его, чтобы сказать что-то вроде «Privacy - Camera Access», а затем просто введите описание в столбце «Значение» – Pierce