我看到在许多WWDC的视频,说你想要达到60.0 FPS尽可能接近,以获得一个更顺利的滚动体验。我有一个UIScrolLView,它可以同时加载图像和两个表视图。目前,我得到30个FPS。这是建议的FPS的一半。只是想知道,通常情况下,在加载图像和其他繁重的内容/渲染内容的表视图/滚动视图中,会得到什么FPS。
对FPS的光解还有其他的建议吗?在过去的一周里,我一直在使用时间分析器、分配和核心动画工具来尽可能地优化工具。
只是为了澄清一下我所拥有的。我在iPad上有一个砖石/瀑布/兴趣风格的布局。所以它不仅仅是一个普通的UITableView。它是一个UIScrollView,它填充了整个屏幕,并填充了几个UIView。每个视图都有一个150x150 UIImageView和一个UITableView,还有一些属性标签,使用Core绘制。因此,当您看到屏幕时,一眼就可以看到5-8表视图,每个单元格都有一个UIImageView,然后每个单元格呈现使用核心文本绘制的属性标签。
所以你可以想象这有多深有多复杂。这不仅仅是一个带有UIImageView的常规表视图。我知道如何在一个带有UITableView的iPhone中只使用一个UIImage就可以得到60个FPS。其概念是异步加载映像,而不是尽可能地阻塞主线程。
编辑:
这里的问题似乎是我的观点中的UITableView。当我从UIView中删除它时,我会得到非常平滑的滚动。
我上传了一个示例项目,它是我所拥有的更简单的版本,但它清楚地显示了问题所在。链接是这里
发布于 2012-08-04 05:24:16
许多因素会影响呈现性能,以下是您可以检查的一些项:
[NSCalender currentCalender]占用了我85%的CPU时间!修复后,一切都滚动得很好!编辑:JPG可能是拍摄照片的更好选择。iOS设备也有专用的JPG解码器。
UITableView会自动卸载和加载单元格,因此这是为您完成的,但是任何定制的CGContext绘图都应该只在该部分可见时进行。而且,在我的经验中,自动视图阴影可能会非常慢。UITableView上使用重用标识符,这将允许UITableView重用单元对象,而不是在滚动时重新分配--看看这个问题的答案。还可以重用UIImages,而不是为同一个文件分配多个文件。imageNamed自动缓存图像,但文件的imageFromContents不缓存。发布于 2012-07-28 19:23:47
我的UITableViewController接近60 fps,其中的表格包含大约2000个单元格,每个单元格从网络中提取一张图像。诀窍是懒洋洋地加载图像,因为您需要它们。这个来自Apple的示例代码非常有用。
总的想法是通过不阻塞主线程来保持UI响应。在另一个线程上执行下载和其他耗时的任务。
发布于 2012-07-28 19:21:51
我会做一件叫做“延迟加载”的事情,它不会加载图像,直到它们被实际看到。
下面是一个很好的例子,说明如何做到这一点:http://www.cocoacontrols.com/platforms/ios/controls/mhlazytableimages
祝好运!
https://stackoverflow.com/questions/11703925
复制相似问题