我正在交叉测试项目中实时显示心电图。它在使用Xamarin的Windows和Android上工作正常,但在IOS中我的速度和速度都很慢。
我认为问题是由于我缺乏ios的专业知识。
我做过两次测试都失败了,有人有解决方案加速吗?
测试A
我调用Plot然后将UIImage wBitmap分配为MyView Backgroud每个< 10ms的
public void Plot(PointF pPrec, PointF pNext)
{
SizeF bitmapSize = new SizeF(wBitmap.Size);
using (CGBitmapContext context2 = new CGBitmapContext(IntPtr.Zero, (int)bitmapSize.Width, (int)bitmapSize.Height, 8, (int)(4 * bitmapSize.Width), CGColorSpace.CreateDeviceRGB(), CGImageAlphaInfo.PremultipliedFirst))
{
context2.DrawImage(new RectangleF(0, 0, wBitmap.Size.Width, wBitmap.Size.Height), wBitmap.CGImage);
context2.SetLineWidth(1);
context2.AddLineToPoint(pNext.X, pNext.Y);
context2.DrawPath(CGPathDrawingMode.Stroke);
// output the drawing to the view
wBitmap = UIImage.FromImage(context2.ToImage());
}
}
TEST B
我调用Plot然后将UIImage wBitmap分配为MyView Backgroud每个< 10ms的
public void Plot2(PointF pPrec, PointF pNext) { UIGraphics.BeginImageContext(wBitmap.Size); context = UIGraphics.GetCurrentContext();
using (context)
{
if (wBitmap != null)
{
context.TranslateCTM(0f, wBitmap.Size.Height);
context.ScaleCTM(1.0f, -1.0f);
context.DrawImage(new RectangleF(0f, 0f, wBitmap.Size.Width, wBitmap.Size.Height), wBitmap.CGImage);
context.ScaleCTM(1.0f, -1.0f);
context.TranslateCTM(0f, -wBitmap.Size.Height);
}
context.SetLineWidth(1);
context.MoveTo(pPrec.X, pPrec.Y);
context.AddLineToPoint(pNext.X, pNext.Y);
context.DrawPath(CGPathDrawingMode.Stroke);
wBitmap = UIGraphics.GetImageFromCurrentImageContext();
}//end using cont
UIGraphics.EndImageContext();
}
答案 0 :(得分:2)
您不需要先绘制位图,然后在视图中使用该位图。正确的方法是继承UIView
,然后覆盖Draw()
方法并在那里绘制你的东西。
然后,您可以在视图上调用SetNeedsDisplay()
来安排重绘。
以下示例绘制箭头形背景:
class YourView: UIView
{
public override void Draw(RectangleF rect)
{
const float inset = 15f;
UIColor.Blue.SetFill();
var path = new UIBezierPath();
path.MoveTo(new PointF(0, 0));
path.AddLineTo(new PointF(rect.Width - inset, 0));
path.AddLineTo(new PointF(rect.Width, rect.Height * 0.5f));
path.AddLineTo(new PointF(rect.Width - inset, rect.Bottom));
path.AddLineTo(new PointF(0, rect.Bottom));
path.AddLineTo(new PointF(0, 0));
path.Fill();
}
}
}
或者,您可能希望查看现有组件,例如Xamarin Components商店中提供的CorePlot或TeeChart。 TeeChart甚至可以跨平台,因此您不必担心Android与iOS。