2016-06-28 2 views
0

뷰 컨트롤러가 많은 앱을 개발 중이며 코드로 배경 이미지를 설정했지만 모든보기 컨트롤러에 해당 코드 블록을 복사하여 붙여 넣어야합니다. 어떻게해야합니까? 그것을 한 번 타이핑하고 모든 뷰 컨트롤러에서 코드를 재사용하도록 호출하십시오. 많이 감사합니다.코드를 다시 사용하여 이미지 설정

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 클래스를 만들고 모든보기 컨트롤러가 해당 클래스에서 상속되도록 할 수 있습니다. 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를 호출 할 수 있습니다 배경 이미지만을위한 일반적인 서브 클래스를 만든다.

관련 문제