如何实现多个视图控制器中的背景图像?
在屏幕切换时,self.view.backgroundColor = UIColor(patternImage: UIImage(named: "file.png"))
背景将与UIViewController一起移动。
是否可以将图像放在视图控制器下的单独图层上?
答案 0 :(得分:2)
解决方案1
创建一个名为MyBackground
的类:
class MyBackground {
class func addBackgroundImage() {
UIGraphicsBeginImageContext(self.view.frame.size)
UIImage(named: "file")?.drawInRect(self.view.bounds)
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
view.backgroundColor = UIColor(patternImage: image)
}
}
如果您想在AViewController
中拨打电话,只需拨打MyBackground.addBackgroundImage()
解决方案2
创建一个名为MyViewController
的ViewController:
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
addBackgroundImage()
}
func addBackgroundImage() {
UIGraphicsBeginImageContext(self.view.frame.size)
UIImage(named: "file")?.drawInRect(self.view.bounds)
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
view.backgroundColor = UIColor(patternImage: image)
}
}
如果AViewController想要设置此图像,只需这样做:
AViewController: MyViewController //AViewController is a subclass of MyViewController
例如:我有一个图像调用background
,我会将其设置为ViewController
的背景图片:
如果我只是将它添加到一行,@startupthekid说:
如果我按照我的说法添加它:
答案 1 :(得分:1)
我认为您可以在容器视图控制器中设置背景,例如导航控制器,选项卡控制器,然后将所有视图控制器的背景设置为清除颜色。
答案 2 :(得分:0)
您应该在每个viewDidload
viewController
中设置图片
更新:
您应该在每个视图控制器中设置,或者您可以设置为窗口。第二件事,如果您的背景使用不同的图像动态变化,那么如果每个viewcontroller的图像不同,您可以使用prepareforsegue
方法将图像传递给nextviewcontroller。如果每个viewcontroller都有相同的图像,那么你可以将它设置为窗口。
:)
答案 3 :(得分:0)
更好的答案是使用UIAppearance
。如果您不熟悉它,UIAppearance
是您发送消息的代理协议,它会修改该类的后续实例。
例如,如果我有自定义按钮类RoundButton
:
RoundButton.appearance().titleFont = Font.Heavy(20)
在我的RoundButton
课程中:
dynamic var titleFont: UIFont? {
get { return self.titleLabel?.font }
set { self.titleLabel?.font = newValue }
}
dynamic
关键字非常重要。它用于Objective-c兼容性,通过UIAppearance
设置不使用它的属性会导致崩溃。
您可以根据需要执行任意数量的自定义属性,并且在操作系统中已经有一些默认属性。
在您的情况下,您可以执行以下操作:
UIImageView.appearanceWhenContainedInInstancesOfClasses([MyCustomViewController.self)].customImage = UIImage(...)
您当然可以使用自定义视图控制器,但在我看来,UIApperance
会将您的UI代码与控制器逻辑分开。
您可以实现所需行为的一种方法是UIViewController
子类:
class MyCustomViewController: UIViewController {
private let backgroundImageView = UIImageView()
dynamic var backgroundImage: UIImage? {
get { self.backgroundImageView.image }
set { self.backgroundImageView.image = newValue }
}
}
然后修改backgroundImage
的外观实例上的MyCustomViewController
属性。
MyCustomViewController.appearance().backgroundImage = ...
编辑:鉴于您的问题具有误导性,并且您想要一个永远不会在所有视图控制器中移动的共享图像,您只需将图像视图插入应用程序窗口即可:
if let window = UIApplication.sharedApplication().windows.first {
let imageView = UIImageView(image: UIImage(named: "face-mask"))
window.addSubview(imageView)
imageView.frame = window.bounds
}
如果您像我一样喜欢Autolayout,那么我会设置约束来将图像视图固定到窗口边缘。