using UIKit;
|
using Foundation;
|
using Shared.IO;
|
using CoreFoundation;
|
using System.Collections.Generic;
|
using System;
|
using System.Runtime;
|
using WebKit;
|
|
namespace Shared
|
{
|
/// <summary>
|
/// MyEchartsView
|
/// 2020-06-19 UIWebView替换为WKWebView
|
/// UIWebView已经弃用,后面再使用的APP将不能发布上架
|
/// </summary>
|
public class MyEchartsView : View
|
{
|
JsonData jsonData = new JsonData { };
|
WKWebView uIWebView;
|
public MyEchartsView()
|
{
|
//默认布局,宽高为0的话会异常
|
var mFrame = new CoreGraphics.CGRect(base.X, base.Y, 10, 10);
|
uIWebView = new WKWebView(mFrame, new WKWebViewConfiguration()) { };
|
uiView = uIWebView;
|
uIWebView.ScrollView.Bounces = false;
|
uIWebView.ScrollView.ScrollEnabled = false;
|
uIWebView.NavigationDelegate = new OnWKNavigationDelegate(this);
|
var filePath = NSBundle.MainBundle.PathForResource("echarts", "html");
|
var url = new NSUrl(filePath, false);
|
uIWebView.LoadFileUrl(url, url);
|
}
|
|
public void Show(string title, string[] xArray, object[] yArray)
|
{
|
jsonData.Title = title;
|
jsonData.XArray = xArray;
|
jsonData.YArray = yArray;
|
EvaluateJavascript();
|
}
|
|
public string Unit
|
{
|
get
|
{
|
return jsonData.Unit;
|
}
|
set
|
{
|
jsonData.Unit = value;
|
}
|
}
|
|
public void EvaluateJavascript()
|
{
|
WKJavascriptEvaluationResult handler = (NSObject result, NSError err) => {
|
if (err != null)
|
{
|
HDLUtils.WriteLine("EvaluateJavascript:" + err);
|
}
|
if (result != null)
|
{
|
HDLUtils.WriteLine("EvaluateJavascript:" + result);
|
}
|
};
|
uIWebView.EvaluateJavaScript($"loadEcharts({Newtonsoft.Json.JsonConvert.SerializeObject(jsonData)},'undefined')", handler);
|
|
}
|
|
|
public class OnWKNavigationDelegate : WKNavigationDelegate
|
{
|
[Weak] MyEchartsView _MyEchartsView;
|
|
public OnWKNavigationDelegate(MyEchartsView view)
|
{
|
_MyEchartsView = view;
|
}
|
|
|
public override void DidFinishNavigation(WKWebView webView, WKNavigation navigation)
|
{
|
Console.WriteLine("WKWebView DidFinishNavigation");
|
_MyEchartsView.EvaluateJavascript();
|
}
|
}
|
|
|
[Serializable]
|
class JsonData
|
{
|
/// <summary>
|
/// 标题内容
|
/// </summary>
|
/// <value>The title.</value>
|
[Newtonsoft.Json.JsonIgnore]
|
public string Title
|
{
|
get
|
{
|
return title["text"].ToString();
|
}
|
set
|
{
|
title["text"] = value;
|
}
|
}
|
[Newtonsoft.Json.JsonProperty]
|
readonly Dictionary<string, object> title = new Dictionary<string, object> { ["text"] = "" };
|
[Newtonsoft.Json.JsonProperty]
|
readonly Dictionary<string, object> tooltip = new Dictionary<string, object> { ["trigger"] = "axis" };
|
/// <summary>
|
/// X轴坐标点
|
/// </summary>
|
/// <value>The XA rray.</value>
|
[Newtonsoft.Json.JsonIgnore]
|
public string[] XArray
|
{
|
get
|
{
|
return (xAxis[0] as Dictionary<string, object>)["data"] as string[];
|
}
|
set
|
{
|
(xAxis[0] as Dictionary<string, object>)["data"] = value;
|
}
|
}
|
[Newtonsoft.Json.JsonProperty]
|
readonly List<object> xAxis = new List<object> { new Dictionary<string, object> { ["type"] = "category", ["boundaryGap"] = false, ["data"] = new object[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } } };
|
[Newtonsoft.Json.JsonIgnore]
|
public string Unit
|
{
|
get
|
{
|
return ((yAxis[0] as Dictionary<string, object>)["axisLabel"] as Dictionary<string, object>)["formatter"].ToString().Substring("{value}".Length);
|
}
|
set
|
{
|
((yAxis[0] as Dictionary<string, object>)["axisLabel"] as Dictionary<string, object>)["formatter"] = "{value}" + value;
|
}
|
}
|
[Newtonsoft.Json.JsonProperty]
|
readonly List<object> yAxis = new List<object> { new Dictionary<string, object> { ["type"] = "value", ["axisLabel"] = new Dictionary<string, object> { ["formatter"] = "{value}" } } };
|
/// <summary>
|
/// Y轴坐标点
|
/// </summary>
|
/// <value>The YA rray.</value>
|
[Newtonsoft.Json.JsonIgnore]
|
public object[] YArray
|
{
|
get
|
{
|
return (series[0] as Dictionary<string, object>)["data"] as object[];
|
}
|
set
|
{
|
(series[0] as Dictionary<string, object>)["data"] = value;
|
}
|
}
|
[Newtonsoft.Json.JsonProperty]
|
readonly List<object> series = new List<object> { new Dictionary<string, object> { ["name"] = "Value", ["type"] = "line", ["data"] = new object[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, ["markPoint"] = new Dictionary<string, object> { ["data"] = new List<object> { new Dictionary<string, object> { ["type"] = "max", ["name"] = "Max" }, new Dictionary<string, object> { ["type"] = "min", ["name"] = "Min" } } }, ["markLine"] = new Dictionary<string, object> { ["data"] = new List<object> { new Dictionary<string, object> { ["type"] = "average", ["name"] = "Average" } } } } };
|
}
|
}
|
}
|