【发布时间】:2014-10-22 13:40:34
【问题描述】:
在所有 iOS 8 设备上,我在使用 UIImagePickerController 时都遇到了一个新问题(在 iOS 7 上它工作正常)。 第一个镜头按预期工作。当我尝试拍摄另一张照片时,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 调整图像大小并将其保存在另一个队列中有所帮助。相机预览需要主线程。
标签: ios xamarin.ios xamarin ios8 uiimagepickercontroller