如何使用媒体插件在Xamarin.Forms中为相机覆盖实现依赖服务?

时间:2019-01-24 19:06:07

标签: c# .net xamarin.forms camera-overlay

我正在尝试使用Xamarin https://github.com/jamesmontemagno/MediaPlugin媒体插件将相机覆盖功能作为依赖项服务传递到共享代码中。

我不知道如何正确实现依赖项服务。该应用程序可以运行,但是当我打开相机时,它不会显示叠加层。如果有人可以帮助我编写代码,或指导我使用覆盖选项的示例,我将不胜感激。

我的界面代码:

public interface IPhotoOverlay 
{
   object GetImageOverlayAsync();
}

我的iOS代码:

public object GetImageOverlayAsync()
    {
        Func<object> func = CreateOverlay;

        return func;
    }

    public object CreateOverlay()
    {
        var imageView = new UIImageView(UIImage.FromBundle("face-template.png"));
        imageView.ContentMode = UIViewContentMode.ScaleAspectFit;

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

        return imageView;
    }

我的共享代码:

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

1 个答案:

答案 0 :(得分:1)

在您的Xamarin.iOS服务中,您需要注册依赖关系,这是一个示例。

[assembly: Dependency (typeof (PhotoOverlayiOS))]
namespace UsingDependencyService.iOS
{
    public class PhotoOverlayiOS : IPhotoOverlay
    {

        public object GetImageOverlayAsync()
        {
            Func<object> func = CreateOverlay;

            return func;
        }

        public object CreateOverlay()
        {
            var imageView = new UIImageView(UIImage.FromBundle("face-template.png"));
            imageView.ContentMode = UIViewContentMode.ScaleAspectFit;

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

            return imageView;
        }  
    }
}