为了澄清这个问题的目的:我知道如何使用子视图和使用drawRect创建复杂的视图.我试图完全理解何时使用一个而不是另一个.
我也明白,提前优化这一点是没有意义的,并且在进行任何分析之前做一些更难的方法.考虑到我对这两种方法感到满意,现在真的想要更深刻的理解.
我的很多困惑来自学习如何使表格视图滚动性能真正流畅和快速.当然,这种方法的原始来源是来自twitter for iPhone(以前的tweetie)的作者.基本上它说,为了使表格滚动黄油光滑,秘诀是不使用子视图,而是在一个自定义uiview中完成所有绘图.从本质上讲,使用大量子视图似乎会减慢渲染速度,因为它们有很多开销,并且经常在父视图上重新合成.
公平地说,这是在3GS是一个非常新的品牌时写的,iDevices从那以后变得更快.不过这种方法是经常 建议在interwebs和其他高性能表.事实上,它是Apple的表示例代码中的一种建议方法,已经在几个WWDC视频(iOS开发人员的实用绘图)和许多iOS 编程书籍中提出过.
甚至还有很棒的工具来设计图形并为它们生成Core Graphics代码.
所以起初我会相信"核心图形存在的原因.它很快!"
但是当我认为我得到"尽可能支持核心图形"的想法时,我开始看到drawRect经常导致应用程序响应能力差,内存非常昂贵,并且真正对CPU征税.基本上,我应该" 避免覆盖drawRect "(WWDC 2012 iOS App性能:图形和动画)
所以我想,就像一切一样,它很复杂.也许你可以帮助自己和其他人了解使用drawRect的时间和原因?
我看到一些使用Core Graphics的明显情况:
我看到避免Core Graphics的情况:
所以赐予你的知识.您在什么情况下可以使用drawRect/Core Graphics(也可以通过子视图完成)?哪些因素会导致您做出这个决定?如何/为什么在一个自定义视图中绘制建议用于黄油平滑表格单元格滚动,但Apple建议drawRect反对性能原因一般?那么简单的背景图像(你何时使用CG创建它们与使用可调整大小的png图像)?
制作有价值的应用程序可能不需要深入理解这个主题,但我不喜欢在不能解释原因的情况下在技术之间进行选择.我的大脑生我的气.
感谢大家的信息.这里有一些澄清问题:
我在Yosemite 10.10.5和Xcode 7上,使用Swift制作一款针对iOS 8及以上版本的游戏.
编辑:可能有用的更多细节:这是一个2D拼图/街机游戏,玩家可以移动石头来匹配它们.根本没有3D渲染.绘图已经太慢了,我还没有得到碎片爆炸.还有一个淡入淡出的水平,非常令人担忧.但到目前为止,这一切都在模拟器上.我还没有真正用iPhone测试,我打赌实际的设备至少要快一点.
我有自己的Draw2D类,它是一种UIView,在本教程中设置.我有一个NSTimer,它在Draw2D中启动以下调用链:
[setNeedsDisplay]; // which calls drawRect, which is the master draw function of Draw2D
drawRect(rect: CGRect)
{
scr_step(); // the master update function, which loops thru all objects and calls their individual update functions. I put it here so that updating and drawing are always in sync
CNT = UIGraphicsGetCurrentContext(); // get the curret drawing context
switch (Realm) // based on what realm im in, call the draw function for that realm …Run Code Online (Sandbox Code Playgroud)