0

我正在开发一个图形应用程序,它接收数据流并显示它。事实证明,在 UIView(Core Graphics)中绘制很多线段是非常缓慢的。我试图通过仅绘制具有新数据的屏幕的一部分来加快速度。

我目前使用此功能重绘屏幕(使用 Xamarin/monotouch)

        NSTimer.CreateRepeatingScheduledTimer (TimeSpan.FromSeconds (0.1), delegate {
            pane.SetNeedsDisplay ();
        });

其中窗格是我的 UIView 对象。窗格对象自己知道屏幕的哪个部分需要重绘。我认为还有另一种方法可以指定要重绘的屏幕区域 - 这是正确的方法吗?还是其他解决方案?

此外,代码还绘制了一组网格。这些永远不会改变。有没有办法将它们保存到某个图层或其他东西,以便我可以将它添加到背景中?

另一种方法是使用openGL,虽然画线看起来不太好,我必须实现很多额外的代码才能让它看起来正确。

谢谢!

4

2 回答 2

2

对于图形数据,您应该直接使用 CoreGraphics 来渲染 UIView 子类drawRect:方法中的线条。确保该方法只重绘与 CGRect 参数重叠的数据。该方法setNeedsDisplay将整个 UIView 标记为需要重绘,因此不要在图形数据更改时使用它,而应使用 UIView 的方法setNeedsDisplayInRect:来指示 UIView 的该区域中有新数据将drawRect:被调用,这只会重绘该部分(如果您已正确实施)。

关于背景网格,您可以将网格渲染为 UIImage,然后在绘制图形的视图后面显示该 UIImage。您需要查看UIGraphicsBeginImageContextCALayer renderInContext:UIGraphicsGetImageFromCurrentImageContext和的文档UIGraphicsEndImageContext

于 2013-06-20T21:09:45.937 回答
1

您可以使用此变体:

void SetNeedsDisplayInRect (RectangleF rect);

那只会要求重绘指定的区域。

于 2013-06-21T14:01:23.790 回答