2016-06-28 3 views
0

多くのビューコントローラを持ち、バックグラウンドイメージをコードで設定したアプリケーションを開発していますが、すべてのビューコントローラにそのブロックをコピーして貼り付ける必要があります。それを一度タイプして呼び出すと、すべてのView Controllerでコードが再利用されます。たくさんありがとうございます。イメージを設定するコードを再利用

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 

} 

答えて

0

親UIViewControllerクラスを作成して、すべてのView Controllerにそのクラスを継承させることができます。 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 
    } 
} 

そして、このクラスからenheritあなたの子ビューコントローラはこのようなものになります。

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

を今、ここでは本当にあなたがそれ

やるべき方法であります

しかし、すべて同じである複数のビューコントローラを持つことは、おそらく良い考えではありません。私はちょうど親ビューコントローラ(明示的に名前を変更する)だけを保持し、ちょうどあなたが望むどんなイメージにもビューにつながるセグの "イメージ"の値を変更します。これにより、大量のビューコントローラを用意する必要がなくなり、必要に応じて将来的にさらに画像を追加することが容易になります。ここで

+0

魅力的な作品です!ありがとう –

+0

問題ありません!喜んで助けてくれた。 –

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を呼び出すことができますバックグラウンドイメージ用の汎用サブクラスを作成します。

関連する問題