2015-01-10 118 views
4

對於不同的方向,我有兩個圖像bg-landbg-port。我想改變chnaging方向上的圖像。但是,圖像不會改變。當我在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創建一個成員變量。 (將其命名爲background

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 
    } 
} 

但最好是一個UIImageView出口添加到您的界面和使用的代碼,而不是創建一個在運行時加載圖像。我更喜歡這將是一個不錯的方法。

+0

之上添加了它,它說self.background未被接受。 'ViewController沒有一個名爲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

另一個問題是,如果故事板文件中有任何內容,則您的imageview將覆蓋這些內容,因爲您在 –