在所有 ViewControllers swift ios 11 中添加背景图像的最佳实践
Posted
技术标签:
【中文标题】在所有 ViewControllers swift ios 11 中添加背景图像的最佳实践【英文标题】:Best practices to add background image in all ViewControllers swift ios 11 【发布时间】:2017-09-28 17:50:27 【问题描述】:以前在 ios 10 上,我使用了以下代码,非常适合我。 我刚刚添加了带有特定颜色的 UIImage + UIView 的 UIView 。在 ios 11 上对其进行测试后,我发现一些屏幕在其余 UI 元素之上都有这个 ImageView,所以这有什么问题
override func viewDidLoad()
super.viewDidLoad()
configureView()
func configureView()
view.backgroundColor = UIColor.clear
let backgroundImage = getBackgroundImage()
view.addSubview(backgroundImage)
view.sendSubview(toBack: backgroundImage)
func getBackgroundImage() -> UIView
let backgroundImage = UIImageView(frame: UIScreen.main.bounds)
backgroundImage.image = UIImage(named: "lemons")
backgroundImage.contentMode = UIViewContentMode.scaleAspectFill
let backgroundView = UIView(frame: UIScreen.main.bounds)
backgroundView.backgroundColor = black
backgroundImage.addSubview(backgroundView)
return backgroundImage
【问题讨论】:
【参考方案1】:如果您以编程方式创建视图控制器(意味着没有故事板或 nib),您可以像这样非常简单地添加背景图像:
class SomeViewController: UIViewController
override func loadView()
view = UIView()
view.frame = UIScreen.main.bounds
setBackground()
func setBackground()
// set image
let bg = UIImageView()
bg.image = // some UIImage
bg.frame = view.bounds
bg.contentMode = .scaleAspectFill
bg.clipsToBounds = true
view.insertSubview(bg, at: 0)
// set tint
let tint = UIView()
tint = view.bounds
tint = UIColor.red
tint = 0.5
view.insertSubview(tint, at: 1)
请记住,当您以编程方式创建视图控制器时,您必须创建视图控制器的实际视图,即view = UIView()
。此外,“核心”任务,例如设置背景图像,应该在loadView
中完成,而“finishing-touch”任务,或者您想要在视图控制器完全加载到内存后执行的任务,应该执行在viewDidLoad
。当然,配置视图控制器的视图属性绝对不能留到最后。
【讨论】:
谢谢你,我会试试你的方法——这么多编码的原因——是我想在uiImage之上放置半透明视图。而且我并不总是以编程方式创建 viewContorller,也许只有少数以编程方式创建,其余来自情节提要,这可能是一团糟 我更新了答案以包含一个色调层。只要您在 0 处插入图像,在 1 处插入色调层,其他所有内容都将添加到它们之上。在我看来,让你的代码尽可能地模块化也是一种更好的做法。因此,不要尝试将图像和色调层合并到一个视图中,而是将它们分开,这样可以更轻松地进行未来的编辑,并且更容易发现错误。【参考方案2】:将configureView()
呼叫从viewDidLoad
移动到viewWillLayoutSubviews
。后者的不便之处在于它在视图控制器的生命周期中被多次调用,因此使用 Bool 属性进行检查,这样您就只调用configureView()
一次,第一次。
【讨论】:
【参考方案3】:斯威夫特 4:
最好将它保存在辅助类中:
static func setBlurBackGround(_ vc:UIViewController)
let imageView = UIImageView()
imageView.image = #imageLiteral(resourceName: "BackGround")
imageView.frame = dBounds
vc.view.addSubview(imageView)
【讨论】:
以上是关于在所有 ViewControllers swift ios 11 中添加背景图像的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章
Swift 代表 - 新手 3 ViewControllers
在 Swift 中使用 UIPageViewController 水平滚动 ViewControllers 的按钮
Swift:在 ContainerView 中单击从 ViewControllers 到 ViewController 的 Storyboard 解决方案
在 Swift 中的 ViewControllers 和条件 segues 之间传递选定的行