2015-01-10 3 views
4

방향이 다른 두 개의 이미지 bg-landbg-port이 있습니다. 나는 방향을 바꾸면서 이미지를 바꾸고 싶다. 그러나 이미지는 변하지 않습니다. LandScape에서 시뮬레이터를로드하면 bg-land은 완벽하게 작동하지만 회전에서는 작동하지 않습니다. 코드 :방향 변경시 배경이 변경되지 않습니다.

override func viewDidLoad() { 
     super.viewDidLoad() 
     loadBackground() 
    } 

    func loadBackground(){ 

     if(UIApplication.sharedApplication().statusBarOrientation.isPortrait){ 
      var bgImage  = UIImage(named: "bg-port") 
      var background = UIImageView(frame: self.view.bounds); 
      background.image = bgImage 
      self.view.addSubview(background) 
      self.view.sendSubviewToBack(background) 
      println(bgImage) 
     } else { 
      var bgImage  = UIImage(named: "bg-land") 
      var background = UIImageView(frame: self.view.bounds); 
      background.image = bgImage 
      self.view.addSubview(background) 
      self.view.sendSubviewToBack(background) 
      println(bgImage) 
     } 


    } 

    override func didRotateFromInterfaceOrientation(fromInterfaceOrientation: UIInterfaceOrientation) { 
     loadBackground() 
    } 

답변

1

새로 추가 한 UIImageView을 이전에 생성 한 UIImageView의 뒷면으로 보내므로 변경되지 않습니다. 이를 수행하는 대신 클래스에 멤버 변수를 만들어 UIImageView으로 만드십시오.

func loadBackground() 
{ 
    if self.background == nil 
    { 
     self.background = UIImageView() 
     self.view.addSubview(self.background) 
     self.view.sendSubviewToBack(self.background) 
    } 

    if(UIApplication.sharedApplication().statusBarOrientation.isPortrait) 
    { 
     var bgImage   = UIImage(named: "bg-port") 
     self.background.frame = self.view.bounds; 
     self.background.image = bgImage 
    } 
    else 
    { 
     var bgImage   = UIImage(named: "bg-land") 
     self.background.frame = self.view.bounds; 
     background.image  = bgImage 
    } 
} 

을 (background로 이름) 그러나 당신의 인터페이스가 아니라 실행시 하나를 만드는 대신 코드를 사용하여 이미지를로드에 UIImageView 콘센트를 추가하는 것이 좋습니다. 그리고 나는 그것이 좋은 접근 방법을 선호합니다.

+0

위에 추가하면 self.background가 허용되지 않습니다. 'ViewController does not는 background라는 이름의 멤버'를 가지고 있습니다. – tika

+0

@ user2078462 : 저의 답에서 UIImageView를 클래스 멤버 변수로 만들고 이것을 배경으로 지정해야한다고 말했습니다. –

+0

완벽하게 작동합니다. 그러나 프로그램 적으로 방법이 있습니까? – tika

2

날이 시도를 위해이 코드는 잘 작동 :

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.loadBackground() 
} 
func loadBackground(){ 

    if(UIApplication.sharedApplication().statusBarOrientation.isPortrait){ 
     let imageName = "Texture.jpg" 
     let image = UIImage(named: imageName) 
     let imageView = UIImageView(image: image!) 

     imageView.frame = self.view.bounds 
     view.addSubview(imageView) 
    } else { 
     let imageName = "AppIcon.png" 
     let image = UIImage(named: imageName) 
     let imageView = UIImageView(image: image!) 

     imageView.frame = self.view.bounds 
     view.addSubview(imageView) 
    } 


} 
override func didRotateFromInterfaceOrientation(fromInterfaceOrientation: UIInterfaceOrientation) { 
    loadBackground() 
} 

이 코드에서 이미지 이름을 변경하는 것을 잊지 마십시오.

이 경우 도움이 될 수 있습니다.

+2

제안. 사용자가 장치를 N 번 회전하면 N 개의 imageView 개체가 화면에 추가됩니다. –

+0

또 다른 문제는 스토리 보드 파일에 내용이있는 경우 이미지보기에서 해당 내용을 다루는 것입니다. –

관련 문제