很难为我的问题找到标题但很容易理解!
我有以下代码,它是一个控件(gif)
public class Gif : WebView
{
public string GifSource
{
set
{
var html = new HtmlWebViewSource();
string GifAssetURL;
switch (Device.OS)
{
case TargetPlatform.Android:
GifAssetURL = "file:///android_asset/";
break;
case TargetPlatform.iOS:
//GifAssetURL = NSBundle.MainBundle.BundlePath;
GifAssetURL = "";
break;
case TargetPlatform.Windows:
GifAssetURL = "ms-appx-web:///Assets/";
break;
default:
GifAssetURL = "";
break;
}
html.Html = String.Format(@"<html><body style='background: #000000;'><img src='{0}' style='width:100%;height:100%;'/></body></html>", GifAssetURL + value);
SetValue(SourceProperty, html);
this.Margin = -10;
}
}
}
它适用于所有平台,但是,当生成release
时,它会引发包含(Android&amp; UWP)的错误:< / p>
using Foundation;
但是,对于iOS部分我需要这个,因为我的 GIF图像位于 Project.iOS 部分的文件夹中。
首先,我使用NSBundle.MainBundle.BundlePath
但也许,它可能是一个简单的字符串?
其次,是否可以从ImageSource.FromResources("");
中获取有效的字符串路径?在这种情况下,我认为它可以解决问题..
感谢您的帮助!
答案 0 :(得分:0)
然后,我终于找到了解决方案!
最后,使用Fondation
链接崩溃了我的发布编译以及获取它的想法,就是拥有一个BaseUrl
界面,让我解释一下!
首先,取回我的gif对象:
public class Gif : WebView
{
public string GifSource
{
set
{
var html = new HtmlWebViewSource();
// Take a look on this line !
string GifAssetURL = DependencyService.Get<IBaseUrl>().Get();
html.Html = String.Format(@"<html><body style='background: #000000;'><img src='{0}' style='width:100%;height:100%;'/></body></html>", GifAssetURL + value);
SetValue(SourceProperty, html);
this.Margin = -10;
}
}
}
根据当前使用的操作系统,将给出良好的路径。
因此,为了使其有效,您必须在PCL部件中创建一个类似于:
的接口namespace Project
{
public interface IBaseUrl { string Get(); }
}
然后,对于您正在关注的每个平台,创建一个继承自IBaseUrl
的类。请看下面的内容: Android,iOS&amp; UWP
using Project;
using Project.Android.DependencyService;
using Xamarin.Forms;
[assembly: Dependency(typeof(BaseUrl_Android))]
namespace Project.Android.DependencyService
{
public class BaseUrl_Android : IBaseUrl
{
public string Get()
{
return "file:///android_asset/";
}
}
}
using Foundation;
using MapPinsProject.Interface;
using MapPinsProject.iOS.DependencyService;
using Xamarin.Forms;
[assembly: Dependency(typeof(BaseUrl_iOS))]
namespace MapPinsProject.iOS.DependencyService
{
public class BaseUrl_iOS : IBaseUrl
{
public string Get()
{
return NSBundle.MainBundle.BundlePath;
}
}
}
using Project;
using Project.UWP.DependencyService;
using Xamarin.Forms;
[assembly: Dependency(typeof(BaseUrl_UWP))]
namespace Project.UWP.DependencyService
{
public class BaseUrl_UWP : IBaseUrl
{
public string Get()
{
return "ms-appx-web:///";
}
}
}
希望它有所帮助!玩得开心!