可接受的滚动 FPS 是多少?提高性能的技巧有哪些?

2024-05-27

我在许多 WWDC 视频中看到,您希望尽可能达到 60.0 FPS,以获得更好的平滑滚动体验。我有一个 UIScrollLView ,它可以立即加载图像和几个表格视图。目前我的帧速率为 30 FPS。这是推荐 FPS 的一半。只是想知道对于加载图像和其他繁重内容/渲染内容的表格视图/滚动视图,你们通常会获得多少 FPS。

还有其他优化 FPS 的技巧吗?过去一周到现在,我一直在使用时间分析器、分配和核心动画工具来启动 Instruments,以尽可能地进行优化。

只是为了澄清一下我所拥有的。我在 iPad 上有砖石/瀑布/pinterest 风格的布局。所以它不仅仅是一个普通的 UITableView。它是一个填充整个屏幕的 UIScrollView,并且填充了几个 UIView。每个视图都有一个 150x150 UIImageView 和一个 UITableView,并且它还有一些使用 Core Text 绘制的属性标签。因此,当您看到屏幕时,一眼就能看到 5-8 个表格视图,每个单元格又具有一个 UIImageView,然后每个单元格呈现使用核心文本绘制的属性标签。

所以你可以想象这是多么深刻和复杂。这不仅仅是带有 UIImageView 的常规表格视图。我知道如何在 iPhone 中仅使用一个 UITableView 和 UIImage 来获得 60 FPS。其概念是异步加载图像并且尽可能不阻塞主线程。

EDIT:

看来这里的问题是我视图中的 UITableView 。当我从 UIView 中删除它时,我得到了非常平滑的滚动。

我上传了一个示例项目,它是我所拥有的更简单的版本,但它清楚地显示了问题。链接是here http://dl.dropbox.com/u/19680269/BroBoard.zip


许多因素都会影响渲染性能,您可以检查以下一些项目:

  • 简介 - 你说你已经做到了,干得好!不幸的是,分析经常被忽视,尽管它可以揭示意想不到的问题。在一个应用程序中,我正在开发一个日历,其中不同的单元格代表日期。起初,单元格之间的滚动速度很慢,这是出乎意料的。我想也许是绘制了太多的单元格。分析后我发现[NSCalender currentCalender]使用了 85% 的 CPU 时间!修复后一切都滚动得很好!

  • 图像 - 大图像会给 CoreGraphics 带来很大的负载。滚动尤其需要大量绘制操作来移动它们。一个技巧是尽可能小地缩放设备上的图像,这使得 CoreGraphics 的工作变得更加容易。如果图像是显示它的视图的两倍,请在视图中显示之前调整 UIImage 的大小。 iOS 设备处理 PNG 的效果最好。它们在编译时由工具(pngcrush)压缩,iOS 有特殊的硬件来渲染它们。

Edit:JPG 可能是照片的更好选择。 iOS 设备也有专用的 JPG 解码器。

  • 自定义绘图 - 如果可能,减少您进行的自定义 CGContext 绘图的数量。大量自定义绘图会对动画速度产生负面影响。如果可能的话,我会考虑在复杂的自定义绘图上使用图像。

  • Cull - 只画你需要的东西。UITableView当单元格出现时自动卸载和加载单元格,因此这是为您完成的,但任何自定义 CGContext 绘图都应该仅在该部分可见时完成。根据我的经验,自动视图阴影也可能非常慢。

  • 重用 - 使用重用标识符UITableView,这将允许UITableView重用单元格对象而不是在滚动时重新分配 - 查看此问题的答案question https://stackoverflow.com/questions/2152180/iphone-what-are-reuseidentifiers-uitableviewcell。也可重复使用UIImages而不是为同一个文件分配多个。imageNamed自动缓存图像但是imageFromContents文件没有。

  • 创建您自己的 - 您可以创建自己的网格视图类,该类会剔除隐藏在屏幕外的子视图视图,并通过延迟内容加载进行滚动。通过编写自定义解决方案,您可以完全控制流程并创建针对使用环境优化的设计。对于大多数用例,您将很难构建比 Apple 标准更好的东西,但我已经在特定情况下看到了它的完成情况。

  • 最后的手段 - 减少有问题的视图的大小(提高过滤率),将内容分成多个页面,缩小图像大小,删除性能不佳的旧设备。在牺牲大部分内容之前,我会满足于 30 FPS。设备将继续变得更快,旧设备将被淘汰,您的应用程序将逐渐变得更快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可接受的滚动 FPS 是多少?提高性能的技巧有哪些? 的相关文章

  • 从 robovm 项目创建 iOS 静态库(JNI 中的 BAD_ACCESS)

    我有大量的Java代码 只有计算函数 没有UI 我想在iOS中将其重用为静态库 我的方法是使用robovm http www robovm com并按照robovm论坛中两篇文章中描述的非官方方式创建静态库 1 基本方式 https gro
  • 如何动态获取 UITableViewCell 的高度

    我创建了自定义的tableViewCell 我在UITableViewCell中添加了UIView SubView 所以我在 UIView 中的所有动态文本和图像内容都会根据文本和图像大小而变化 但现在 HeightforRowAtInde
  • 如何使用 alamofire 通过基本身份验证上传图像?

    我正在尝试使用 alamofire 4 7 1 和此代码上传图像 但说实话 我怀疑我没有编写正确的代码来上传图像 func uploadDefect defectRemark String defectLocation String def
  • 从未调用过交互式委托方法

    我想在 ViewController 1 和 NavigationViewController 2 之间进行交互式转换 NavigationController 通过按钮调用 因此呈现时没有交互转换 它可以通过按钮或 UIPanGestur
  • Flutter 应用程序在 iOS 平台的 firebase 电话身份验证中崩溃

    我在我的项目中实现了 Firebase Phone auth 在 Android 端 一切正常 但对于 iOS 端 当我尝试从我的端发送验证码时 应用程序崩溃并失去连接 我已在下面提交了我的代码 主程序 dart class MyApp e
  • SwiftUI 意外地自动弹出 NavigationLink

    我有一个简单的用例 其中一个屏幕使用 NavigationLink 推送另一个屏幕 iOS 14 5 有一个奇怪的行为 即推送的屏幕在被推送后立即弹出 Code NavigationLink destination EmptyView Em
  • 有什么方法可以询问方法的名称吗?

    我正在尝试调试我正在开发的 iPhone 应用程序 向各种源文件添加 50 条 NSLog 语句的想法让我感到很兴奋 我想做的是写一对陈述 比如 NSString methodName self methodName NSLog metho
  • 使用数组中的字符串淡入/淡出标签

    func setOverlayTitle self overlayLogo text Welcome var hello String Bon Jour GUTEN nMORGEN BONJOUR HOLA BUENOS D AS BUON
  • UIViewController 不旋转到横向

    在许多情况下需要旋转控制器但不起作用 现在我遇到了相反的问题 它正在旋转 我想禁用它 在那个 ViewController 中我有这个 BOOL shouldAutorotateToInterfaceOrientation UIInterf
  • 如何删除 UITableView 中的缩进?

    首先 我对此很陌生 我很可能忘记了一些非常简单的事情 问题 我正在制作一个应用程序 在 a 中显示来自 imgur com 的随机图像tableView 由于某种原因 所有单元格都会缩进少量 如下图所示 我摆弄了许多设置storyboard
  • 在 WKWebView 中禁用缩放?

    有谁知道在 WKWebView 中禁用双击和捏缩放的简单方法 我尝试过的任何方法都不起作用 Webview scrollView allowsMagnification false Error value of type WKWebView
  • 如何使用phonegap在iOS应用程序中防止键盘推送webview

    当屏幕底部的输入字段获得焦点时 键盘会向上推我的网络视图 并且页面的上部不再可见 我想防止键盘推高网络视图 有人有主意吗 对焦 设置window scrollTo 0 0 这可以防止键盘完全推高 webview input on focus
  • CATextLayer 上 iOS 6 中不需要的垂直填充

    背景 我在 iOS 5 中开始了我的项目 并构建了一个带有图层的漂亮按钮 我在按钮上添加了一个 textLayer 并使用以下代码将其居中 float textLayerVerticlePadding self bounds size he
  • 无法以编程方式快速设置 NSLayoutConstraint 乘数...“无法分配给此表达式的结果

    我试图以编程方式快速设置乘法器的约束 当我设置该值时 它只会给我错误 无法分配给该表达式的结果 我用 IBOutlet 声明了 NSLayoutConstraint 然后设置乘数 就像我对另一个常量所做的那样 效果很好 但这个不会接受它 I
  • 有角度的动态背景图片

    在 html 模板中 我有这种带有动态图像的样式 div style background none width 200px height 150px div 它适用于网络浏览器和 Android 浏览器 但是 使用 style 的动态背景
  • 根据内容自动更改单元格高度 - Swift

    在 Swift 中使用 UITableView 有人可以帮我根据标签 图片和描述自动更改单元格的高度吗 所有信息都正确传递 我只需要帮助格式化它 我尝试使用调整它cell frame size height 但这没有效果 我可以更改故事板中
  • 通过 Button Swift 中的标签发送行和部分

    我里面有这个cellForRowAtIndexPath cell plusBut tag indexPath row cell plusBut addTarget self action plusHit forControlEvents U
  • 使用输入类型 = 文件捕获照片时移动 safari 崩溃

    我正在使用输入类型文件在 iOS 中启动相机 我正在使用以下代码行
  • ios8 键盘高度有所不同

    我使用下面的代码来获取键盘高度 该高度在带有 ios8 的 iPhone 5s 设备中与带有 ios7 的 IPhone4s 设备中有所不同 因此 当我在带有 ios8 的 iPhone5s 中点击它时 我的文本字段移动得非常高 而相同的代
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐