ios - UIImagePickerController 每秒显示一次黑屏

标签 ios xamarin.ios xamarin ios8 uiimagepickercontroller

在所有 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;
}

或使用完成 block

PresentViewController(_imagePicker, true, () => { });

PresentViewController(_imagePicker, true, () => { Thread.Sleep(300); });

或者同步到主线程

InvokeOnMainThread(() => { ... });` 
`NSOperationQueue.MainQueue.AddOperation(() => { ... });

整个代码文件可在以下位置获得:https://gist.github.com/anonymous/83a855d44d697235849b

最佳答案

我尝试了您尝试的所有方法,然后决定走另一条路。组件商店中的 Xamarin.Mobile 组件不仅提供了相机的跨平台实现,而且在我的测试中也没有遇到同样的 iOS 7+ 黑色预览屏幕问题。

来自 的示例用法https://components.xamarin.com/gettingstarted/xamarin.mobile

using Xamarin.Media;
using System.Threading;
using System.Threading.Tasks;
//...


var picker = new MediaPicker();
MediaPickerController controller = picker.GetTakePhotoUI (new StoreCameraMediaOptions {
   Name = "test.jpg",
   Directory = "MediaPickerSample"
});

// On iPad, you'll use UIPopoverController to present the controller
PresentViewController (controller, true, null);

controller.GetResultAsync().ContinueWith (t => {
// Dismiss the UI yourself
   controller.DismissViewController (true, () => {
    //might want to add if(t.Result.Status = task.enumstatus.rantocompletion)
    //or camera cancels will throw exceptions
    MediaFile file = t.Result;
    });

}, TaskScheduler.FromCurrentSynchronizationContext());

关于ios - UIImagePickerController 每秒显示一次黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26508857/

相关文章:

iphone - 将 @selector 传递给我的 UIbutton 但单击事件没有响应

c# - 导出所有功能以将页面切换到一个类 (Xamarin.iOS/C#)

ios - Xamarin iOS - 绑定(bind)只有 ARMv7 架构的库 - 我的问题是什么?

ios - Xcode11 : Unable to install “AppName”

ios - 如何在 iOS 中使用特定的裁剪矩形框录制视频

uitableview - 以编程方式添加到 UITableViewCell 的 UIButtons 永远不会出现

Xamarin Assets 与可绘制资源

ios - 嵌入式 Xamarin.Forms 在 IOS 上查看为空

iOS - 缺少推送通知授权

ios - 在 NSArray 中搜索类似 %ab% 的内容