如何使用swift将相同的背景图像添加到我的ios应用程序中的所有视图?

时间:2016-01-12 10:55:05

标签: ios xcode swift

我希望能够将背景图像添加到适用于所有视图的ios应用程序,而不必将此图像添加到每个视图。是否可以向UIWindow添加图像?

现在,当我进行转换时,即使背景相同,新视图的背景也会“转换”在我之前的视图上。我希望能够只进行内容转换,而不是背景,这是相同的。

1 个答案:

答案 0 :(得分:3)

你应该能够通过以下方式实现这一目标:

  1. 继承UIWindow并覆盖drawRect以绘制图像;有关子类化UIWindow here
  2. 的详细信息
  3. 然后使用UIAppearance来控制应用中其余视图的背景颜色(您应该将其设置为clearColor);有关此here的详细信息,但我认为您需要对控制器使用的视图进行子类化,以便处理接受的答案中的注释
  4. 基本实现可能如下所示:

    class WallpaperWindow: UIWindow {
    
        var wallpaper: UIImage? = UIImage(named: "wallpaper") {
            didSet {
                // refresh if the image changed
                setNeedsDisplay()
            }
        }
    
        init() {
            super.init(frame: UIScreen.mainScreen().bounds)
            //clear the background color of all table views, so we can see the background
            UITableView.appearance().backgroundColor = UIColor.clearColor()
        }
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
        }
    
        override func drawRect(rect: CGRect) {
            // draw the wallper if set, otherwise default behaviour
            if let wallpaper = wallpaper {
                wallpaper.drawInRect(self.bounds);
            } else {
                super.drawRect(rect)
            }
        }
    }
    

    在AppDelegate中:

    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        var window: UIWindow? = WallpaperWindow()