我有一个问题,甚至不确定是否可以解决,但如果可能的话,确实需要一些帮助。 我正在做的基础是使用CGPoint数组存储绘制的签名中的多个CGPoint,然后将该数组中的每个值存储到本地SQLite上的字符串数组中。
我是他们检索此SQLite数据并将其清除后传递回相同的List中。我需要将此列表转换为CoreGraphics.CGPoint数组,以便可以将数组重新显示在签名区域中。我尝试了各种方法来执行此操作,但这似乎是不可能的。
希望有人可以帮助我解决这个问题。
编辑
这就是我将CGPoint数组转换为列表的方式
var tempSignatureArray = signatureView.Points;
foreach (var item in tempSignatureArray)
{
var tempItem = item.ToString();
FormResults.signaturePoints.Add(tempItem);
}
这是我尝试过的其他各种方法的尝试,现在我摆脱了:
var test = FormResults.signaturePoints.ToArray();
CoreGraphics.CGPoint[] pointArray = test;
编辑2
下面是实际存储在字符串列表中的内容
{X=394.4296875, Y=71.359375}
{X=399.125, Y=71.875}
{X=405.2578125, Y=72.453125}
{X=412.5, Y=73}
{X=421.6875, Y=73.546875}
{X=432.6875, Y=74.125}
答案 0 :(得分:0)
您使用foreach进行了初始转换,是否也使用foreach进行了逆转换?
List<CGPoint> pointList = new List<CGPoint>();
foreach (var p in FormResults.signaturePoints)
{
// p is the string representation
// you will need to do some parsing to convert the string p into x,y coords
pointList.Add(new CGPoint(x,y));
}
pointArray = pointList.ToArray();
要解析字符串值,我会尝试类似的事情(注意RegEx在这里可能有用,但这不是我的强项)。
var s = "{X=394.4296875, Y=71.359375}";
var ss = s.Split(',');
var x1 = ss[0] .Substring(3, ss[0].Length-3);
double x = Double.Parse(x1);
var y1 = ss[1].Substring(3, ss[1].Length-3);
y1 = y1.Substring(0,y1.Length-1);
double y = Double.Parse(y1);