我正在制作iPhone游戏并使用UIView
个对象来绘制精灵。大多数时候,我没有性能问题。然而,一旦我在屏幕上有大约15到20个对象(其中可能有5个移动),游戏变得相当慢,特别是在iPhone 3G上。帧速率可以降至每秒一帧。
这仅仅是使用UIView
个对象的限制,还是iOS能够同时在屏幕上处理这么多UIView
个对象?
为了解决问题,我已经非常简单地绘制了我的视图 - 绘制一个红色矩形。每个视图只会调用drawRect
一次。视图层次结构非常简单和浅薄。我正在使用CADisplayLink
每帧更新UIView
个位置。
没有其他事情发生,所以我想听听其他人是否成功使用了这个UIView
个对象。
答案 0 :(得分:3)
如果您要将每个视图的opaque
属性设置为NO
,请记住这会严重影响绘制视图的速度。如果您的观看次数不透明,则应将此设置保留为YES
,这是默认设置。
答案 1 :(得分:3)
我的问题的关键在于我在游戏内容之上有标签。标签不是不透明的,这可能是问题的很大一部分,正如phix23所建议的那样。
最重要的是删除内容之上的每秒帧数标签。拥有一个在每一帧上改变内容的标签会导致很多放缓。
我还有一个大型标签,显示在游戏的大部分时间,并在你升级时改变了形状。事实证明,在所有东西上面绘制这个标签也会造成很大的减速。
在回答我最初的问题时,我发现在iPhone 3G上我可以同时在屏幕上支持大约30-40个不透明的UIViews,同时还有2或3个非不透明的视图。改变大小,形状或位置的非不透明UIViews是迄今为止最差的,甚至覆盖大量屏幕的其中一个很快就会导致问题。
答案 2 :(得分:0)
对于这种类型的应用程序,你应该使用CoreGraphics / Quartz / OpenGL,但无论如何我认为这种低计数没有限制。例如,如果我有一个包含9行的表视图,并且每行有5个子视图,则它仍然显示为可接受的快速。您是否尝试过使用UIView动画来更改视图中的位置?
学习OpenGL的好运;)