重用代码来设置图像

时间:2016-06-28 03:02:29

标签: xcode swift

我正在开发一个拥有大量视图控制器并使用代码设置背景图像的应用程序,但我必须在每个视图控制器中复制并粘贴该代码块,如何键入一次并调用它在每个视图控制器中重用代码。谢谢。

var imageView: UIImageView!

let image = UIImage(named: "backGroundImage.png")!


override func loadView() {

    super.loadView()
    self.imageView = UIImageView(frame: CGRectZero)
    self.imageView.contentMode = .ScaleAspectFill
    self.imageView.image = image
    self.view.addSubview(imageView)
}

override func viewDidLayoutSubviews() {

    super.viewDidLayoutSubviews() 
    self.imageView.frame = self.view.bounds

}

2 个答案:

答案 0 :(得分:0)

您可以做的是创建一个父UIViewController类,并让所有视图控制器继承该类。 Somethig喜欢这样:

class MyParentViewController: UIViewController {
    var imageView: UIImageView!

    let image = UIImage()


    override func viewDidLoad() {
        super.viewDidLoad()
        self.imageView = UIImageView(frame: CGRectZero)
        self.imageView.contentMode = .ScaleAspectFill
        self.imageView.image = image
        self.view.addSubview(imageView)
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews() 
        self.imageView.frame = self.view.bounds
    }
}

然后你的子视图控制器会从这个类看起来像这样:

class MyViewController: MyParentViewController {
    overide func viewDidLoad() {
        image = UIImage(named:"My image name")
        super.viewDidLoad()
    }
}

现在,这就是你应该这样做的方式

然而,拥有多个视图控制器完全相同可能不是一个好主意。我只会保留父视图控制器(显然重命名),只需更改"图像"的值。在segue中,可以看到您想要的任何图像。这将消除对大量视图控制器的需求,并且如果您愿意,将来可以更轻松地添加更多图像。

答案 1 :(得分:0)

这是我将如何做到的:

protocol ImageViewBackground {
    var backgroundImageView: UIImageView? {get set}
    mutating func setBackgroundImage(image: UIImage)
}

extension ImageViewBackground where Self: UIViewController {

    mutating func setBackgroundImage(image: UIImage) {

        let backgroundImageView = self.backgroundImageView ?? setupImageView()
        backgroundImageView.image = image
    }

    mutating func setupImageView() -> UIImageView {

        let imageView = UIImageView(frame: self.view.frame)
        imageView.contentMode = .ScaleAspectFill
        view.addSubview(imageView)
        backgroundImageView = backgroundImageView
        return imageView
    }
}

然后让任何UIViewController遵守这样的协议:

class ViewController: UIViewController, ImageViewBackground {
    var backgroundImageView: UIImageView?
}

然后,您可以从VC中的任何位置调用setBackgroundImage,而无需仅为背景图像创建通用子类。