На всех устройствах iOS 8 у меня возникает новый вопрос, когда я использую UIImagePickerController (на iOS 7 он работает нормально). Первый снимок работает так, как ожидалось. Когда я пытаюсь сделать еще одну фотографию, появляется UIImagePickerController, но отображается черный экран.UIImagePickerController показывает черный экран для каждого второго снимка
Все элементы управления, такие как камера переключения, отмена и снятие кнопки с фотографией, доступны и работают. Если я попытаюсь сделать вторую фотографию и прикоснуться к кнопке, я получу правильный предварительный просмотр взятой фотографии. Если я сохраню эту фотографию и попытаюсь сделать другую, все будет вести себя так, как ожидалось. Только четвертая фотография снова повторяет ту же тему. И так далее ...
Это мой код:
public void ButtonCameraClicked(object sender, EventArgs eventArgs)
{
_imagePickerDelegate = new ImagePickerControllerDelegate(this);
_imagePicker = new UIImagePickerController();
_imagePicker.ImagePickerControllerDelegate = _imagePickerDelegate;
if (UIImagePickerController.IsSourceTypeAvailable(UIImagePickerControllerSourceType.Camera))
_imagePicker.SourceType = UIImagePickerControllerSourceType.Camera;
else
_imagePicker.SourceType = UIImagePickerControllerSourceType.PhotoLibrary;
PresentViewController(_imagePicker, true, null);
}
public override void FinishedPickingMedia(UIImagePickerController picker, NSDictionary info)
{
BTProgressHUD.Show("Bild wird gespeichert...");
var image = (UIImage)info.ObjectForKey(new NSString("UIImagePickerControllerOriginalImage"));
image.SaveToCustomPhotosAlbum(info[UIImagePickerController.MediaMetadata] as NSDictionary, _controller.AlbumName, _controller.MediaSaved);
picker.DismissViewController(true, null);
}
Я уже гугле намного пытавшихся следующие вещи без какого-либо успеха
Инициализация только один раз
if (_imagePicker == null)
{
_imagePickerDelegate = new ImagePickerControllerDelegate(this);
_imagePicker = new UIImagePickerController();
_imagePicker.ImagePickerControllerDelegate = _imagePickerDelegate;
}
Или с использованием блока завершения
PresentViewController(_imagePicker, true,() => { });
PresentViewController(_imagePicker, true,() => { Thread.Sleep(300); });
Или синхронизации с основным потоком
InvokeOnMainThread(() => { ... });`
`NSOperationQueue.MainQueue.AddOperation(() => { ... });
Весь код файл доступен по адресу: https://gist.github.com/anonymous/83a855d44d697235849b
У меня была такая же проблема. Изменение размера и сохранение изображения в другой очереди с помощью dispatch_async помогло. Предварительный просмотр камеры требует основного потока. –