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

Posted

技术标签:

【中文标题】如何使用 swift 将相同的背景图像添加到我的 ios 应用程序中的所有视图?【英文标题】:How can I add the same background image to all views in my ios app using swift? 【发布时间】:2016-01-12 10:55:05 【问题描述】:

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

现在,当我进行过渡时,新视图的背景也会“过渡”到我之前的视图,即使它的背景相同。我希望能够只设置内容过渡,而不是背景,这是一样的。

【问题讨论】:

您应该能够通过继承 UIWindow 并覆盖 drawRect 来绘制图像来实现这一点。然后将 UIColor.clearColor 设置为所有视图的背景色。 【参考方案1】:

您应该能够通过以下方式实现:

    继承 UIWindow 并覆盖 drawRect 以绘制图像;有关子类化的详细信息 UIWindow here 然后使用UIAppearance 控制应用程序中其余视图的背景颜色(应将其设置为clearColor);有关此here 的详细信息,但我认为您需要对控制器使用的视图进行子类化,以处理已接受答案中的注释

基本实现可能如下所示:

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()

【讨论】:

以上是关于如何使用 swift 将相同的背景图像添加到我的 ios 应用程序中的所有视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置使用导航控制器添加的 TableView 的背景图像 - Swift 1.2

在 SwiftUI 中,如何将视频循环添加为全屏背景图像?

如何在swift上使用背景颜色将图像设置为imageview中心

Swift如何修改从移动相机拍摄的图像中的exif信息

使用 Swift (iOS) 和 Photos 框架保存自定义图像的元数据

如何使用swift在Xcode中设置背景图像?