iPhone的“跳板”视图到底是啥?

Posted

技术标签:

【中文标题】iPhone的“跳板”视图到底是啥?【英文标题】:What is the iPhone's "Springboard" view exactly?iPhone的“跳板”视图到底是什么? 【发布时间】:2013-03-11 15:00:16 【问题描述】:

我的问题是,默认的 iPhone 菜单是使用故事板创建的 UIcollection 视图,还是有更多功能? (为了避免模仿它的功能)

【问题讨论】:

如果要将其提交到 App Store(而不是企业分发版),则创建小部件的“包装应用程序”或尝试模拟 ios 图标网格之类的任何内容都违反了提交指南。 太棒了!感谢您的洞察力。 由于 Springboard 已经是 iPhone OS 第一版的一部分,而 UICollectionView 是 iOS6 以来的新版本,因此 Springboard 不太可能是 UICollectionView。但是,如果您想制作类似的布局:使用UICollectionView 完全有可能 【参考方案1】:

如果你想了解 SpringBoard 的视图层次结构:

    如果 iOS 模拟器尚未运行,请启动它。 确保您在模拟器中查看 SpringBoard。 在 Xcode 中,选择 Product > Attach to Process > springboard。跳板流程位于列表的“系统”部分。 仍然在 Xcode 中,选择 Product > Debug > Pause。 在 Xcode 的调试控制台(应该显示(lldb) 提示符的地方),输入po [[UIApp keyWindow] recursiveDescription]

瞧,您可以打印出 SpringBoard 的整个屏幕视图层次结构。我的开始是这样的:

(lldb) po [[UIApp keyWindow] recursiveDescription]
$0 = 0x0b63abf0 <SBAppWindow: 0xce3ef10; baseClass = UIWindow; frame = (0 0; 320 480); layer = <UIWindowLayer: 0xce3f010>>
   | <SBUIRootView: 0xb162de0; frame = (0 0; 320 480); layer = <CALayer: 0xb162e60>>
   |    | <UIView: 0xb163010; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0xb1630c0>>
   |    |    | <SBWallpaperView: 0xb1632a0; baseClass = UIImageView; frame = (0 0; 320 480); userInteractionEnabled = NO; layer = <CALayer: 0xb160f70>>
   |    |    |    | <UIImageView: 0xb1610d0; frame = (0 0; 0 0); hidden = YES; userInteractionEnabled = NO; layer = <CALayer: 0xb161130>>
   |    |    |    | <UIImageView: 0xb161160; frame = (0 0; 0 0); hidden = YES; userInteractionEnabled = NO; layer = <CALayer: 0xb163390>>
   |    |    | <SBIconContentView: 0xb163da0; frame = (0 0; 320 480); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0xb163e50>>
   |    |    |    | <UIView: 0xc939710; frame = (0 371; 320 109); opaque = NO; autoresize = W+TM; layer = <CALayer: 0xc939770>>
   |    |    |    |    | <SBDockIconListView: 0xc9381d0; frame = (0 20; 320 89); autoresize = TM; layer = <CALayer: 0xc9382c0>>
...

【讨论】:

这在 2018 年仍然有效吗?它显示一条错误消息“确保“SpringBoard”尚未运行,并且username 有权对其进行调试。” 我可以在 macOS 10.13.6 上使用 Xcode 10.1 完成此操作,但我有一个非标准的 SIP 配置。具体来说,我启动了我的恢复分区,打开了终端,然后运行了csrutil enable --without debugging --without dtrace。这意味着我可以使用调试器和 dtrace 来分析系统进程。 我在运行 macOS 10.14 的 MBP 上尝试了 ~ lldb -n SpringBoard,但显示错误消息 attach failed: unable to attach。当我切换到另一个运行 10.13.6 的 MBP 时,它运行成功。您是否建议在我个人的 10.14 MB 上运行 csrutil enable --without debug --without dtrace 而无需从恢复分区启动?或者也许你有一个解释为什么它在 10.14 上不起作用.. 我没有运行 10.14 的 Mac 进行实验。您必须启动恢复分区才能修改 SIP 配置(使用 csrutil)。当您在正常分区中重新启动时,更改就会生效。【参考方案2】:

来自Springboard上的***文章:

SpringboardHome Screen 是管理 iOS 主屏幕的标准应用程序。其他任务包括启动 WindowServer、启动和引导应用程序以及在启动时设置一些设备设置。

【讨论】:

简洁明了。谢谢你,黑蛙。

以上是关于iPhone的“跳板”视图到底是啥?的主要内容,如果未能解决你的问题,请参考以下文章

类似跳板的菜单,用于选择情节提要中的其他视图

iPhone:viewDidDisappear 的正确用法是啥?

iPhone 方向管理:最有效的方法是啥?

在 iPhone 中延迟加载图像的最佳方式是啥?

iPhone iOS 实例化静态 NSString 单元重用标识符的正确方法是啥?

如何让 UITabBar 在 iPhone X 上扩展到底部?