如何控制UIView的更新部分(iOS / Xamarin) - 我需要防止屏幕被完全擦除

时间:2013-06-20 20:56:55

标签: ios uiview xamarin.ios xamarin redraw

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

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

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

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

此外,代码绘制了一组网格。这些从未改变。有没有办法将它们保存到某个层或某个东西,以便我可以将它添加到后台?

替代方案是使用openGL,虽然绘制线看起来不太好,但我必须实现许多额外的代码才能使它看起来正确。

谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您可以使用此变体:

void SetNeedsDisplayInRect (RectangleF rect);

这只会请求重绘指定的区域。