【问题标题】:Changing Background on orientation change fails更改方向时更改背景失败
【发布时间】:2015-01-10 07:01:00
【问题描述】:

我有两个图像 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()
    }

【问题讨论】:

    标签: ios swift ios8 ios8.1


    【解决方案1】:

    这段代码对我来说很好,试试这个:

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

    不要忘记从此代码更改图像名称。

    也许这会对你有所帮助。

    【讨论】:

    • 一个建议。如果用户旋转设备 N 次,屏幕上会添加 N 个 imageView 对象。
    • 另一个问题是,如果情节提要文件中有任何内容,您的图像视图将覆盖这些内容,因为您将其添加到该文件之上
    【解决方案2】:

    它没有改变,因为您将新添加的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 插座添加到您的界面并使用代码加载图像,而不是在运行时创建一个。我更喜欢这将是一个不错的方法。

    【讨论】:

    • 它说 self.background 不被接受。 ViewController doesnot have a member named background
    • @user2078462:我在回答中提到,您需要创建一个 UIImageView 作为您的类成员变量并将其命名为背景
    • @user2078462:我没听明白。你的意思是有没有办法不通过代码来做?是的。您可以为此使用故事板和自动布局功能(要加载不同的图像,您需要通过代码来完成)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多