我需要在iOS中将一系列图像显示为动画(使用Monotouch)。使用800x600大小的图像,我能在iPad 3上显示的最快速度是160毫秒(6.25 fps)。我希望它在15-30fps范围内(每张图像<50ms)。从存储中读取图像需要&lt; 10毫秒因此它是一个缓慢的屏幕绘图。
public override void Draw (RectangleF rect)
{
base.Draw (rect);
var cgimg = UIImage.FromFile (filename).CGImage;
CGContext g = UIGraphics.GetCurrentContext();
g.DrawImage (new RectangleF (0, 0, cgimg.Width, cgimg.Height), cgimg);
}
将它们渲染为电影不会提供我想要的交互速度(来回擦洗帧)
这是否超出硬件限制? (它似乎不应该是)。我需要使用openGL还是Monogame?
答案 0 :(得分:1)
好的,有几件事需要帮助:
UIImage
,因为这种情况经常发生。将它设置为类中的成员变量,该变量将在对象的生命周期中发生一次,例如构造函数LayoutSubviews
,或者设置filename
变量等等。CGImage
。using
方法的CGContext
周围添加Draw
声明。我认为通过做这些事情你可以获得更好的表现。
答案 1 :(得分:0)
尝试OpenGL后,我最终直接绘制到视图层。乐器使用这种技术为800x600图像说24 FPS。 (iPad 3上的iOS 6.1)
this.Layer.Contents = UIImage.FromFile( {filename}).CGImage;
SetNeedsDisplay ();
这表现得很好,并且与我的预期相符。如果第二次显示图像,性能会上升到40+ FPS(我假设有缓存)。