具有相同背景的多个ViewController
如何实现多个视图控制器中的背景图像?具有相同背景的多个ViewController
随着self.view.backgroundColor = UIColor(patternImage: UIImage(named: "file.png"))
背景将与屏幕切换时UIViewController一起移动。
是否可以将图像放置在视图控制器下的单独图层上?
你应该设置图像中的每个viewController
更新的viewDidload
:
要么你应该设置在每个视图控制器,也可以设置为窗口。第二件事,如果你的背景随着不同的图像动态变化,那么你可以使用prepareforsegue
方法将图像传递给nextviewcontroller,如果每个viewcontroller的图像不同。如果每个视图控制器都有相同的图像,那么您可以将其设置为窗口。
:)
解决方案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
:
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说:
如果我添加它,因为我说:
一个更好的答案是使用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
关键字是非常重要的。它用于通过UIAppearance
不使用它的objective-c兼容性和设置属性将导致崩溃。
你可以根据需要做很多自定义属性,并且在操作系统中已经有一些默认的属性。
在你的情况,你可以这样做:
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 }
}
}
,然后修改的MyCustomViewController
外观实例backgroundImage
属性。
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,就像我一样,那么我会设置约束来将图像视图固定到窗口边缘。
我认为你可以在你的容器视图控制器中设置背景,比如navi控制器,选项卡控制器,然后设置所有视图控制器的背景以清除颜色。
当我切换到另一个屏幕时它不会移动吗?无论如何,我需要保持静止。 –
哦,你想永久在后台永久静态图像?我的印象是你只是想要相同的背景。你应该澄清你的问题,在这种情况下你想要什么是非常不清楚的。并看到我的答案,我会更新它。 – barndog
@jayåk不,它在切换时不会移动。检查我的更新回答你的问题。 – Lion