c# - 如何使用 Xamarin.Forms 的媒体插件在共享代码中实现 iOS 覆盖?

标签 c# ios xamarin xamarin.forms

我正在尝试在 Xamarin 中实现媒体插件的覆盖选项,可在此处找到:https://github.com/jamesmontemagno/MediaPlugin

我了解如何在 iOS 代码中使用该功能,但在共享代码中实现它时遇到问题。

如果有人知道我的代码有什么问题,或者是否有在共享代码中使用覆盖功能的工作示例,我将不胜感激。

我已经设置了一个接口(interface)来处理 iOS 代码的覆盖,并通过依赖服务传递了该函数。当我设置断点并进入函数时,似乎 func 内部的代码块正在跳过。相机可以工作,但在使用相机时不会出现叠加层。

IPhotoOverlay:

namespace Camera
{
public interface IPhotoOverlay 
{
   object GetImageOverlay();

    }
}

应用委托(delegate):

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        global::Xamarin.Forms.Forms.Init();
        LoadApplication(new App());

        Xamarin.Forms.DependencyService.Register<IPhotoOverlay, PhotoOverlay_iOS>();

        return base.FinishedLaunching(app, options);
    }

PhotoOverlay_iOS:

[assembly: Xamarin.Forms.Dependency (typeof (PhotoOverlay_iOS))]
namespace Camera.iOS
{
public class PhotoOverlay_iOS: IPhotoOverlay
{

    public PhotoOverlay_iOS ()
    {
    }

    public object GetImageOverlay()
    {

        Func<object> func = () =>
        {
            var imageView = new UIImageView(UIImage.FromBundle("face-template.png"));
            imageView.ContentMode = UIViewContentMode.ScaleAspectFit;

            var screen = UIScreen.MainScreen.Bounds;
            imageView.Frame = screen;

            return imageView;
        };

        //Func<object> func = CreateOverlay;

        return func;
    }        

}
}

共享代码:

var photo = await Plugin.Media.CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions()
            {
                OverlayViewProvider = DependencyService.Get<IPhotoOverlay>().GetImageOverlay,
                DefaultCamera = Plugin.Media.Abstractions.CameraDevice.Front
            });

最佳答案

解决方案:

您可以引用下面的代码。

in Forms

async void OpenCameraAsync()
{         
  Func<object> func = () =>
  {
    var obj = DependencyService.Get<IPhotoOverlay>().GetImageOverlay();       
    return obj;
  };

  var photo = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions()
  {
     OverlayViewProvider =func,
     DefaultCamera = Plugin.Media.Abstractions.CameraDevice.Front,
  });
}

in iOS project

public object GetImageOverlay()
{ 
  var imageView = new UIImageView(UIImage.FromBundle("yourimagename.png"));
  imageView.ContentMode = UIViewContentMode.ScaleAspectFit;

  var screen = UIScreen.MainScreen.Bounds;
  imageView.Frame = screen;

  return imageView;               
}

关于c# - 如何使用 Xamarin.Forms 的媒体插件在共享代码中实现 iOS 覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54634753/

相关文章:

c# - 如何从文件读取到流并显示为文本?

objective-c - UITableView的 "Prototype Cell"选项怎么了?

android - 为什么 BroadcastReceiver 在没有实例的情况下也能工作?

c# - 租车程序C#

c# - 仿函数在 C# 中有等效项吗?

c# - 连接四(Unity3D 和 C#)的 Minimax : Problems

ios - 我应该怎样做才能根据所选区域设置正确显示日期?

ios - UIView Swift 中的 UITableView

cordova - 混合应用程序取决于服务器端补丁

c# - Xamarin 窗体 RelativeLayout : Can't get relative layout to resize correctly in a row