2016-12-12 12 views
0

В моем приложении iOS у меня есть ImageView и две кнопки для открытия камеры и фотобиблиотеки. Когда я нажимаю на одну из кнопок, приложение закрывается. (Я запускаю приложение на своем устройстве, а не в симуляторе) Что мне нужно изменить в моем коде?Доступ к камерам и фотобиблиотеке

class PhotoViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 


@IBOutlet weak var ImageDisplay: UIImageView! 
@IBOutlet weak var libraryOutlet: UIButton! 
@IBOutlet weak var cameraOutlet: UIButton! 


override func viewDidLoad() { 
    super.viewDidLoad() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

@IBAction func openCameraButton(_ sender: UIButton) { 
     let picker = UIImagePickerController() 
     picker.delegate = self 
     picker.sourceType = .camera 
     present(picker, animated: true, completion: nil) 

    } 

@IBAction func openLibraryButton(_ sender: UIButton) { 
     let picker = UIImagePickerController() 
     picker.delegate = self 
     picker.sourceType = .photoLibrary 
     present(picker, animated: true, completion: nil) 
    } 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
    ImageDisplay.image = info[UIImagePickerControllerOriginalImage] as? UIImage 
    dismiss(animated: true, completion: nil) 
} 

}

ответ

0

Если вы работаете на iOS10, вы должны добавить записи в Info.plist для доступа к камере

поставить этот ключ в Info.plist

Использование конфиденциальности-камеры Описание

http://useyourloaf.com/blog/privacy-settings-in-ios-10/

Если приложение не получило бы сбоя, как это происходит в вашем случае

0

Если вы разрабатываете приложение в ios 10, необходимо добавить настройки конфиденциальности в свой info.plist и описать что-то там, где вам нужна эта конфиденциальность.

Настройка конфиденциальности Список:

Bluetooth Sharing - NSBluetoothPeripheralUsageDescription

Календарь - NSCalendarsUsageDescription

CallKit - NSVoIPUsageDescription

камеры - NSCameraUsageDescription

Контакты - N SContactsUsageDescription

Здоровье - NSHealthShareUsageDescription & NSHealthUpdateUsageDescription

HomeKit - NSHomeKitUsageDescription

Местоположение - NSLocationUsageDescription, NSLocationAlwaysUsageDescription,

NSLocationWhenInUseUsageDescription

Media Library - NSAppleMusicUsageDescription

Микрофон - NSMicrophoneUsageDescription

движения - NSMotionUsageDescription

Фотографии - NSPhotoLibraryUsageDescription

Напоминания - NSRemindersUsageDescription

Распознавание речи - NSSpeechRecognitionUsageDescription

Sirikit - NSSiriUsageDescription

ТВ Provider - NSVideoSubscriberAccountUsageDescription

0

IOS 10 не разрешен доступ Контактного, камеры, фото библиотека, местоположение пользователя и так далее, пока мы не говоря Почему мы используем it.open своего PLIST в качестве исходного кода добавьте следующий код под dict Теперь запустите его снова.

<!-- Photo Library --> 
<key>NSPhotoLibraryUsageDescription</key> 
<string>$(PRODUCT_NAME) photo use</string> 

<!-- Camera --> 
<key>NSCameraUsageDescription</key> 
<string>$(PRODUCT_NAME) camera use</string> 

<!-- Location --> 
<key>NSLocationUsageDescription</key> 
<string>$(PRODUCT_NAME) location use</string> 

<!-- Contacts --> 
<key>NSContactsUsageDescription</key> 
<string>$(PRODUCT_NAME) contact use</string> 
1

В прошивке 10 вам необходимо получить разрешение на доступ к PhotoLibrary или камер путем добавления ниже ключей от PLIST, и вы должны использовать правильный метод делегата.

enter image description here

Для доступа в библиотеку фотографий:

@IBAction func library(_ sender: UIButton) { 

    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary) { 
     let imagePicker = UIImagePickerController() 
     imagePicker.delegate = self 
     imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary 
     imagePicker.allowsEditing = true 
     self.present(imagePicker, animated: true, completion: nil) 
     } 
    } 

Для доступа к камере устройства:

@IBAction func camera(_ sender: UIButton) { 

    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) {  
     imagePicker.delegate = self 
     imagePicker.sourceType = UIImagePickerControllerSourceType.camera; 
     imagePicker.allowsEditing = false 
     self.present(imagePicker, animated: true, completion: nil) 
     } 
    } 

выбрать и отображения изображения:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { 
    ImageDisplay.image = image 
    } 
    picker.dismiss(animated: true, completion: nil); 
} 

Выход:

enter image description here