如何将自定义图像设置为ViewController背景

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

我创建了一个按钮,允许我从相机胶卷设置图像作为ViewController背景(imageView是背景视图),但我需要保存它并在ViewController加载时重新加载它。

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    @IBOutlet weak var backgroundSelectionView: UIView!
    @IBOutlet weak var imageView: UIImageView!

    @IBAction func imageButton(_ sender: UIButton) {
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = .photoLibrary
        imagePicker.allowsEditing = false

        present(imagePicker, animated: true, completion: nil)
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            imageView.image = image
        }
        self.dismiss(animated: true, completion: nil)
    }
}

我想我应该使用路径(我在某处阅读但我不知道该怎么做,因为我找不到任何东西)。你能提供一些关于如何保存和加载CUSTOM图像的建议(不是你在代码中手动选择和导入的特定图像,我已经可以做到了吗?)

swift path background uiimageview
2个回答
0
投票

欢迎来到StackOverflow!

最简单的方法是将图像保存到磁盘,然后在加载ViewController时恢复它。

要保存图像,请使用FileManager并保存到应用程序的文档存储:

/// Saves a background image to disk
/// - Parameter image: The background image to save to disk
/// - Returns: true if successful, false otherwise
func saveBackgroundImage(image: UIImage) -> Bool {

    // make sure that the image can be transformed into data (assuming PNG)
    guard let data = image.pngData() ?? imageView.image?.pngData() else {
        return false
    }

    // ensure that you can write to the document director
    guard let directory = FileManager.default.urls(for: .documentDirectory, 
                                                   in: .userDomainMask).first else {
        return false
    }

    // write the file
    do {
        try data.write(to: directory.appendingPathComponent("backgroundImage.png")!)
        return true
    } catch {   
        print(error.localizedDescription)
        return false
    }
}

现在,您需要一种方法来检索文件:

/// Retrieves the saved background image
/// - Returns: The background image from disk if it exists, or nil
func getSavedBackgroundImage() -> UIImage? {
    if let dir = FileManager.default.urls(for: .documentDirectory, 
                                          in: .userDomainMask).first {
        return UIImage(contentsOfFile: URL(fileURLWithPath: dir.absoluteString).appendingPathComponent("backgroundImage.png").path)
    }
    return nil
}

imagePickerController(picker: didFinishPickingMediaWithInfo:)方法中,当您在imageView上设置图像时,通过调用self.saveBackgroundImage(image: image)保存背景图像。如果您没有检查从saveBackgroundImage(image:)返回的布尔值,请按如下方式调用它:

let _ = self.saveBackgroundImage(image: image)

防止“未使用结果”警告。

现在,实现你的viewDidLoad,你将尝试加载图像:

override func viewDidLoad() {
    super.viewDidLoad()
    if let backgroundImage = self.getSavedBackgroundImage() {
        // set the background image on the `imageView`
        self.imageView.image = backgroundImage
    }
}

0
投票

请设置背景图片如下,

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

func assignbackground(){
        let background = UIImage(named: backgroundImage)

        var imageView : UIImageView!
        imageView = UIImageView(frame: view.bounds)
        imageView.contentMode =  UIViewContentMode.ScaleAspectFill
        imageView.clipsToBounds = true
        imageView.image = background
        imageView.center = view.center
        view.addSubview(imageView)
        self.view.sendSubviewToBack(imageView)
    }

请将剩余代码用作@Leejay Schmidt的代码

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