我正在尝试在 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/