我无法设置背景图片(Swift)

问题描述 投票:0回答:2

我制作了一个简单的计时器应用,我想在背景中添加背景图片或视频。但是,我做不到,也不知道为什么。

有人可以告诉我为什么图片没有显示在背景中吗?我在viewDidLoad方法中设置背景。也许@IBOutlet var backgroundView: UIView!部分有误?制作此Xcode项目时,将其与给定的UIView连接。

class ViewController: UIViewController, UITableViewDelegate {
    let mainStopwatch = Stopwatch()
    let lapStopwatch = Stopwatch()
    var isPlay: Bool = false

    var laps: [String] = []
    //UI components

    @IBOutlet weak var lapRestButton: UIButton!
    @IBOutlet weak var playPauseButton: UIButton!
    @IBOutlet weak var lapTimerLabel: UILabel!
    @IBOutlet weak var timerLabel: UILabel!
    @IBOutlet weak var lapsTableView: UITableView!
    @IBOutlet var backgroundView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.addBackground(name:  "nathan-dumlao-iXXyrEwZgiU-unsplash")

        lapRestButton.isEnabled = false

        lapsTableView.dataSource = self
        lapsTableView.delegate = self
    }

    //UI Settings
    override var shouldAutorotate: Bool {
        return false
    }

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return UIInterfaceOrientationMask.portrait
    }

    //Actions
    @IBAction func playPauseTimer(_ sender: Any) {
        lapRestButton.isEnabled = true
        changeButton(lapRestButton, title: "Lap", color: .black)
    }
}

这是用于设置背景图片的另一个快捷文件。

extension UIView {

func addBackground(name: String) {
    let width = UIScreen.main.bounds.size.width
    let height = UIScreen.main.bounds.size.height

    let imageViewBackground = UIImageView(frame: CGRect(x: 0, y: 0, width: width, height: height))
    imageViewBackground.image = UIImage(named: name)

    imageViewBackground.contentMode = .scaleAspectFill

    self.addSubview(imageViewBackground)
    self.sendSubviewToBack(imageViewBackground)
}
swift xcode
2个回答
0
投票
var timer = Timer()
var counter = 0   // the counter is use for the index of array in below code
var imageArr = ["image","image1","image2"] //Image arr 

override func viewDidLoad() {
    super.viewDidLoad()

    self.addBackground(name: "image") // set default image on your view

    timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true) // timer will start and it will change view background image after one min you can change time according to your requirement.
}

 // called every time interval from the timer
  @objc func timerAction() {
    self.addBackground(name: self.imageArr[counter]) // here we are change our view background image when timer function is run on every min
    counter += 1 // every-time counter will increment by one so the image array index will also increment and we will get our new image
   }

  // that's your code only you need to change one line that last one
   func addBackground(name: String) {
    let width = UIScreen.main.bounds.size.width
    let height = UIScreen.main.bounds.size.height

    let imageViewBackground = UIImageView(frame: CGRect(x: 0, y: 0, width: width, height: height))
    imageViewBackground.image = UIImage(named: name)

    imageViewBackground.contentMode = .scaleAspectFit

    self.viewref.addSubview(imageViewBackground) // here we will set the image view to our view 
}

希望这将有助于您更改视图背景。谢谢。


0
投票

似乎您没有在类代码中的任何地方使用backgroundView,所以首先

backgroundView中删除storyBoard,也从类文件中删除代码

  • viewDidLoad()
    override func viewDidLoad() {
        super.viewDidLoad()

        self.addBackground(name:  "nathan-dumlao-iXXyrEwZgiU-unsplash") //Update this line

        lapRestButton.isEnabled = false

        lapsTableView.dataSource = self
        lapsTableView.delegate = self
    }


  • 将您的扩展名代码更新为以下代码
extension YourViewController {

   func addBackground(name: String) {
       let width = self.view.frame.size.width
       let height = self.view.frame.size.height

       let imageViewBackground = UIImageView(frame: CGRect(x: 0, y: 0, width: width, height: height))
       imageViewBackground.image = UIImage(named: name)

       imageViewBackground.contentMode = .scaleAspectFill

       self.view.addSubview(imageViewBackground)
//     self.sendSubviewToBack(imageViewBackground) //Comment this line
   }
}

© www.soinside.com 2019 - 2024. All rights reserved.