![](/img/trans.png)
[英]How to Implement Dependency Service for Camera Overlay in Xamarin.Forms Using the Media Plugin?
[英]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.