代码之家  ›  专栏  ›  技术社区  ›  Eric Chong

Swift中所有视图控制器的背景图像相同

  •  -2
  • Eric Chong  · 技术社区  · 7 年前

    我想为所有视图控制器设置相同的背景图像。以下是我尝试过的:

    let backgroundImage = UIImageView(frame: UIScreen.main.bounds)
    backgroundImage.image = UIImage(named: "bg_name.png")
    backgroundImage.contentMode = UIViewContentMode.scaleAspectFill
    self.view.insertSubview(backgroundImage, at: 0)
    

    但这只能通过到处复制粘贴来实现。有什么更好的方法可以做到这一点?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Chris Edgington    7 年前

    如果您的意思是希望在所有视图控制器中具有相同的背景图像,那么一个选项是创建自定义基础 ViewController 类,并让您的所有其他类继承自该类。例如-

    class BackgroundImageViewController: ViewController {
    
     override func viewDidLoad(_animated: Bool) {
        super.viewDidLoad(animated: animated)
        let backgroundImage = UIImageView(frame: UIScreen.main.bounds)
        backgroundImage.image = UIImage(named: "bg_name.png")
        backgroundImage.contentMode = UIViewContentMode.scaleAspectFill
        self.view.insertSubview(backgroundImage, at: 0)
      }
    
    }
    

    然后-

    class AnotherViewController: BackgroundImageViewController {
    
      // Your normal view controller stuff
    
    }
    
        2
  •  1
  •   Rodrigo poot may    7 年前

    可以创建视图控制器类的扩展

    extension UIViewController {
    
        /// This function sets an image as the background of the view controller
        ///
        /// - Parameters:
        ///   - imageName: name of image
        ///   - contentMode:
        ///          .scaleAspectFill
        ///          .scaleAspectFit
        ///          .scaleToFill
        func setBackgroundImage(_ imageName: String, contentMode: UIViewContentMode) {
            let backgroundImage = UIImageView(frame: self.view.bounds)
            backgroundImage.image = UIImage(named: imageName)
            backgroundImage.contentMode = contentMode
            self.view.insertSubview(backgroundImage, at: 0)
        }
    
    }
    

    在任何UIViewController类中的用法

    override func viewDidLoad() {
        super.viewDidLoad()
    
        self.setBackgroundImage("name_image", contentMode: .scaleAspectFit)
    }