2015-01-10 173 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将覆盖这些内容,因为您在 –