有人见过那些 Interface Builder 属性“不透明”和“清除图形上下文”的工作吗?

Posted

技术标签:

【中文标题】有人见过那些 Interface Builder 属性“不透明”和“清除图形上下文”的工作吗?【英文标题】:Have someone ever seen those Interface Builder properties 'Opaque' and 'Clears Graphics Context' work? 【发布时间】:2017-04-10 10:12:43 【问题描述】:

我正在扫描我的整个项目,禁用任何可以禁用的东西以加速应用程序。例如,不需要响应触摸的视图的用户交互属性等等。我知道收益将是最小的,但无论如何,请允许我这样做。 ????

看看我可以关闭哪些东西,我在所有视图中都看到了这些名为 OpaqueClears Graphics Context 的属性,我早就知道了。

我从 2008 年开始为 ios 开发,自创建故事板以来,最初使用 Interface Builder 以编程方式和广泛地创建所有内容。

话虽如此,我意识到我从未见过这些属性 OpaqueClears Graphics Context 产生任何差异,尽管它们处于状态。

例如:我现在创建了这个UIButton,它使用背景图像。图像有一个半不透明的阴影。我将按钮的OpaqueClears Graphics Context 属性设置为开/关,在Interface Builder 上没有区别,在应用运行时也没有区别。

我在理论上知道 Apple 对这些属性的说法,但现在回想起来,我意识到我从来没有看到它们中的任何一个产生任何差异,尽管它们处于状态,即使当我过去以编程方式创建视图时也是如此。

你们能举一些这些属性的状态会产生影响的代码示例吗?

【问题讨论】:

opaque 视图绘制速度更快,因为不需要合成。这对于静态视图几乎没有区别,但在 tableviews/scrollviews/collectionviews 或在视图必须“移动”的动画中,这可能是 60fps 和性能不佳之间的区别。 Apple 在过去的免费 WWDC 性能视频中涵盖了这个主题。例如,UIVisualEffectViews 透明且背景模糊,可能会对性能造成很大影响。 >这对静态视图几乎没有什么影响……我想说根本没有区别。您为什么不将此评论作为您的答案,以便我接受? 我会把它作为答案发布,但恐怕我没有关于 Clears Graphics Context 的任何信息。 【参考方案1】:

opaque 视图绘制速度更快,因为不需要合成。这对于静态视图几乎没有区别,但在 UITableViews / UIScrollViews / UICollectionViews 或在视图必须“移动”的动画中,这可能是 60fps 和较差性能之间的区别。

Apple 在过去的免费 WWDC 性能视频中介绍了这个主题。例如,透明且模糊背景的 UIVisualEffectViews 可能会对性能造成很大影响。

以下是参考图形/UI 性能的免费 WWDC 视频的链接;肯定有更多的 WWDC CAAnimation / SpriteKit 视频,但下面的视频专门介绍了性能。

WWDC 2012:

优化 2D 图形和动画性能:https://developer.apple.com/videos/play/wwdc2012/506/(谈论opaque;包括使用工具调试应用以获得更好性能的示例) iOS 应用性能:图形和动画:https://developer.apple.com/videos/play/wwdc2012/238/(流畅的动画和滚动)

WWDC 2014:

iOS 应用的高级图形和动画:https://developer.apple.com/videos/play/wwdc2014/419/(UIVisualEffects;包括使用工具调试应用以获得更好性能的示例)

【讨论】:

太棒了! ! !

以上是关于有人见过那些 Interface Builder 属性“不透明”和“清除图形上下文”的工作吗?的主要内容,如果未能解决你的问题,请参考以下文章

Interface Builder IB - 导航控制器,跳过视图

如何在 Interface Builder 中使用自定义 UIButton 类别?

Interface Builder PREVIEW使用IBDesignable和核心图形(drawrect)?

IOS Interface Builder - 在单个视图控制器场景中管理多个视图

在 Interface Builder (Xcode 5) 中滚动时禁用回弹

Interface Builder中的UIView`readableContentGuide`?