Как установить пользовательское изображение в качестве фона ViewController - PullRequest
0 голосов
/ 27 марта 2019

Я создал кнопку, которая позволяет мне устанавливать изображение с рулона камеры в качестве фона 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)
    }
}

Я думаю, что должен использовать пути (я где-то читал, но не знаю, как это сделать, так как ничего не могу найти).Не могли бы вы дать совет о том, как сохранить и загрузить ПОЛЬЗОВАТЕЛЬСКОЕ изображение (не конкретное, которое вы вручную выбираете и импортируете в своем коде, я уже могу это сделать?)

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Пожалуйста, установите backgroundImage, как показано ниже,

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

0 голосов
/ 27 марта 2019

Добро пожаловать в 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)

, чтобы предотвратить предупреждение "Result unused".

Теперь реализуйте ваш viewDidLoad, где вы попытаетесь загрузить изображение:

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