使用相同背景图像的具有多个场景的视图控制器 (UIViewController) 情节提要

Posted

技术标签:

【中文标题】使用相同背景图像的具有多个场景的视图控制器 (UIViewController) 情节提要【英文标题】:View Controller (UIViewController) Storyboard with multiple scenes using same background image 【发布时间】:2016-10-19 01:17:43 【问题描述】:

我正在开发一款游戏,其中第一个视图控制器将包含其余 30 个视图控制器的全部功能,其中其余的这些控制器将是第一个视图控制器的子类。我的计划是为我的应用程序中的所有 30 个视图控制器或场景使用单个故事板,它们都将使用相同的背景图像。为了让您了解我在说什么,我在此 Drawing.Storyboard 图像中仅显示 2 个场景,但计划在同一故事板中再显示 28 个场景。 Drawing.Storyboard

如果这个故事板中的所有 30 个场景都有相同的 UIView 背景图像,如何处理。我是否必须为场景中的每个视图添加相同的背景图像,或者只需将背景图像添加到第一个场景视图并使用容器视图其余部分?请注意,我过去从未使用过容器视图。

【问题讨论】:

使用扩展程序创建背景图像,只需从所有控制器调用它,您不需要将其添加到情节提要中 尝试在 Appdelegate 的窗口中设置图像,如下链接:***.com/questions/4915474/… Himanshu,如果我按照你的方式,你能发布答案或提供一个例子吗?谢谢。 【参考方案1】:

经过“h44f33z”的进一步研究和建议,以下将在您的故事板中不使用 UIView 图像的情况下工作。

ViewController A

class ViewControllerA: UIViewController 
  override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    // Load background image for all views
    let bgImageView = UIImageView(frame: UIScreen.main.bounds)
    bgImageView.image = UIImage(named: "bg_image")
    self.view.addSubview(bgImageView)
  

视图控制器 B

class ViewControllerB: ViewControllerA 
  override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

  

您无需在 ViewController B 中执行任何操作,因为它是 ViewController A 的子类。通过此设置,只要视图是第一个视图控制器的子类,您就可以使用尽可能多的视图。

【讨论】:

【参考方案2】:

一种方法是,您可以创建UIViewController 的父/基类并将UIImageView 添加到self.view in viewDidLoad()

因此,对于所有 30 个 ViewController,应该扩展到该基本 viewController。它看起来类似于这个

class StartViewController: BaseViewController

您的基类 viewDidLoad 将类似于

override func viewDidLoad() 
    super.viewDidLoad()

    let bgImageView = UIImageView(frame: UIScreen.mainScreen().bounds)
    bgImageView.image = UIImage(named: "bg-image")
    self.view.addSubview(bgImageView)


您可以在基类中添加更多功能或处理事件,所有 30 个子视图控制器都可以轻松使用

【讨论】:

如果我添加此代码并从第二个视图控制器的情节提要中删除具有我的背景图像的 bg_image 视图,bg_image 永远不会加载到我的第二个视图控制器中,它是第一个视图控制器的子类。任何其他或进一步的建议!谢谢。 第一个视图控制器是什么意思?基本控制器? 基本上我有 ViewControllerA 和 ViewControllerB。我需要的一切都在 ViewControllerA 或基础中,而 ViewControllerB 是 ViewControllerA 的子类。如果我在 ViewControllerB 中添加此代码,图像永远不会加载。基本上 ViewControllerB 有它自己的 UIView 场景。当我删除该 UIView 并使用此代码加载 bg_image 时,它​​永远不会加载。

以上是关于使用相同背景图像的具有多个场景的视图控制器 (UIViewController) 情节提要的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 的多个视图中使用 UINavigationController 中的固定背景图像?

跨多个视图控制器共享背景图像

具有多个视图控制器的 iOS 应用

iOS13中具有多个窗口场景的***视图控制器

什么算法可以混合具有相同场景的多个图像,除了每个图像中不同位置的一个对象?

具有固定背景图像的 ipad/iphone 应用程序