我创建了一个按钮,允许我从相机胶卷设置图像作为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图像的建议(不是你在代码中手动选择和导入的特定图像,我已经可以做到了吗?)
欢迎来到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
}
}
请设置背景图片如下,
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的代码