xon*_*rlz 18 iphone objective-c uiscrollview ipad ios
我在许多WWDC视频中看到,你希望尽可能接近60.0 FPS以获得更好的平滑滚动体验.我有一个UIScrolLView,它可以同时加载图像和几个表视图.目前我获得30 FPS.这是推荐的FPS的一半.只是想知道你们通常会得到什么FPS的桌面视图/滚动视图加载图像和其他重物/渲染的东西.
有关优化FPS的其他提示吗?过去一周我一直在使用时间分析器,分配和核心动画工具来启动仪器,以尽可能地优化.
只是为了澄清我所拥有的一切.我在iPad上有一个砖石/瀑布/ pinterest风格的布局.所以它不仅仅是一个普通的UITableView.它是一个UIScrollView,填满整个屏幕,并充满了几个UIView的.每个视图都有一个150x150的UIImageView和一个UITableView,还有一些使用Core Text绘制的属性标签.因此,当您看到屏幕时,您可以一眼看到5-8表格视图,每个单元格再次具有UIImageView,然后每个单元格渲染使用核心文本绘制的属性标签.
所以你可以想象这是多么深刻和复杂.这不仅仅是带有UIImageView的常规表视图.我知道如何在带有UIImage的iPhone中只使用一个UITableView获得60 FPS.这个概念是异步加载图像而不是尽可能地阻塞主线程.
编辑:
看来这里的问题是我在视图中的UITableView ..当我从UIView中删除它时,我得到了非常流畅的滚动...
我上传了一个示例项目,它是我所拥有的更简单的版本,但它清楚地显示了问题.链接在这里
Jus*_*ers 19
很多事情会影响渲染性能,这里有一些你可以检查的项目:
简介 - 你说你已经做到了这一点,太棒了!不幸的是,分析经常被忽略,即使它可以揭示意外问题.在一个应用程序中,我正在使用表示日期的不同单元格的日历.首先在单元格之间滚动缓慢,这是出乎意料的.我想也许是在绘制一些细胞太多了.在分析后,我发现[NSCalender currentCalender]使用了85%的CPU时间!修好之后一切都滚动得很棒!
图像 - 大图像在CoreGraphics中投入了大量的负担.滚动特别需要大量的绘制操作来移动它们.一个提示是尽可能少地在设备上缩放图像,这使得CoreGraphics的工作变得更加容易.如果图像的大小是显示它的视图的两倍,请在视图中显示之前调整UIImage的大小.iOS设备最适合处理PNG.它们在编译时由工具(pngcrush)压缩,iOS具有用于渲染它们的特殊硬件.
编辑:JPG可能是照片的更好选择.iOS设备也有专门的JPG解码器.
自定义绘图 - 如果可能,减少自定义CGContext绘图的数量.大量自定义绘图对动画速度有负面影响.如果可能的话,我会考虑在复杂的自定义绘图上使用图像.
剔除 - 只画出你需要的东西.UITableView自动卸载并加载出现的单元格,这样就完成了,但任何自定义CGContext绘图都应该在该部分可见时完成.在我的经验中,自动视图阴影也可能非常慢.
重用 - 使用重用标识符UITableView,这将允许UITableView重用单元格对象而不是在滚动时重新分配 - 查看此问题的答案.同时重用UIImages而不是为同一个文件分配多个.imageNamed自动缓存图像但imageFromContents文件没有.
创建自己的 - 您可以创建自己的网格视图类,剔除屏幕外隐藏的子视图视图,并滚动延迟内容加载.通过编写自定义解决方案,您可以完全控制流程并创建针对使用环境进行优化的设计.对于大多数用例,您将很难构建比Apple标准更好的东西,但我已经看到它在特定情况下完成.
最后的手段 - 减少违规视图的大小(改善滤液),将内容分成多个页面,缩小图像尺寸,切断性能不佳的旧设备.在牺牲大部分内容之前,我会满足30 FPS.设备将继续变得更快,旧设备将被淘汰,您的应用程序将逐渐变得更快.
| 归档时间: |
|
| 查看次数: |
4965 次 |
| 最近记录: |