ios - 在 iOS 上,当某些维度信息不可用时,我们如何在 viewDidLoad 中在屏幕上绘制内容?

标签 ios uiviewcontroller uikit

在应用程序启动时,我直接在 CGBitmapContext 上绘制内容,将其转换为 CGImage,然后将其设置为 viewDidAppear 中的 View 层

它实际上相当快,但由于 Apple 要求向应用程序添加启动图像,因此我添加了一个屏幕外观的静态图像作为启动图像。

然而,接下来发生的是当应用程序启动时,启动图像显示,但屏幕将在 0.5 到 1 秒后变黑,我认为是由于 viewDidLoad 启动和 viewDidAppear 开始运行,但在开始时,屏幕一片空白。

然后在 0.5 秒后,一切都显示出来,但这会产生白屏的“闪光”。

所以看起来至少有两个选项,它们是

  1. 只是让 Launch 图像完全空白,但我不确定 Apple 是否会拒绝该应用程序,因为他们想要“应用程序初始外观的静态图像”......但我想知道是否初始图像显示得如此之快(0.5 到 1 秒,他们还会介意吗?)

  2. 另一种选择是将所有绘图从 viewDidAppear 移动到 viewDidLoad,但我发现 viewDidLoad 中缺少一些信息>,比如viewDidLoad中的self.view.bounds{{0, 0}, {768, 1004}},它变了到 viewDidAppear 中正确的 {{0, 0}, {320, 460}}(正在 iPhone 4S 上测试)。

所以我认为 viewDidLoad 中的某些 View 信息尚未正确设置,这是一个进退两难的问题。一种方法可能是检查它是 iPad 还是 iPhone,并对 self.view.bounds 值进行硬编码,但是否有更好的方法来做到这一点?

最佳答案

在您在 viewWillAppear 期间启动的后台线程上创建您的 CGImage,然后您将拥有尺寸。

也许在 viewDidLoad 中将 View 背景设置为与您的启动图像相同,这样当您绘制 CGImage 时,用户就不会看到闪烁。

关于ios - 在 iOS 上,当某些维度信息不可用时,我们如何在 viewDidLoad 中在屏幕上绘制内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12012869/

相关文章:

ios - TTTAttributedLabel 链接字体在 UIAlertView 出现时发生变化

ios - 如何使用一个 View Controller 上的按钮将文本添加到另一个 View Controller 的 TableView 中的一行?

ios - 如何在 Storyboard 上创建 Segue,从以编程方式注册的 UICollectionViewCell 到新的 UIViewController?

ios - 当前事件的时间戳/NSDate在UIKit中启动

ios - UIView 上的触摸事件

ios - 从数据库中检索数据并显示?操作系统

ios - Lib 工具无法创建存档

ios - Xcode 5 项目中没有 Swift 设置

ios - 将变量从 tableView 传递到 prepareForSegue?

swift - 尽管 UI 操作在主线程上运行,但 UI 仍会出现故障