簡體   English   中英

如何使用Xamarin.Forms的媒體插件在共享代碼中實現iOS覆蓋?

[英]How to Implement an iOS Overlay in Shared Code Using the Media Plugin for Xamarin.Forms?

我正在嘗試在Xamarin中實現媒體插件的覆蓋選項,可在此處找到: https : //github.com/jamesmontemagno/MediaPlugin

我了解如何在iOS代碼中使用該功能,但是在共享代碼中實現該功能時遇到了麻煩。

如果有人知道我的代碼出了什么問題,或者有一個在共享代碼中使用覆蓋功能的有效示例,將不勝感激。

我已經設置了一個接口來處理iOS代碼的疊加層,並已通過依賴項服務傳遞了該功能。 當我設置斷點並進入函數時,func內的代碼塊似乎正在跳過。 相機可以使用,但使用相機時不會出現覆蓋圖。

IPhotoOverlay:

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

    }
}

AppDelegate:

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
            });

解:

您可以參考以下代碼。

形式

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,
  });
}

在iOS項目中

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;               
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM