#ios #swift
#iOS #swift
Вопрос:
В моей программе пользователь случайным образом выбирает изображение в 1-м контроллере представления, а затем выбранное изображение отправляется на 2-й контроллер представления. Теперь мой вопрос в том, как я могу сохранить это изображение, отправленное на 2-й контроллер представления (сохраненное изображение будет обновлено, если пользователь выберет другое изображение в 1-м контроллере представления), чтобы я мог использовать его, даже если я перейду на другой контроллер представления? Это код моего 1-го контроллера представления, и как я отправляю выбранное изображение на 2-й контроллер представления:-
var image1: UIImage!
@IBAction func Button1(_ sender: UIButton) {
image1 = UIImage(named: "image")
}
@IBAction func Button2(_ sender: UIButton) {
image1 = UIImage(named: "image")
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.destination is 2ndViewController {
let vc2 = segue.destination as! 2ndViewController
vc2.image2 = image1
}
}
Комментарии:
1. вы должны использовать файловую систему, и вы можете сохранить имя изображения по умолчанию для пользователя.
2. @Yodagama Не могли бы вы привести мне пример того, как я могу это сделать? Был бы признателен!
3. Я немного отредактировал свой ответ.. (добавлено некоторое объяснение)
Ответ №1:
вы не можете сохранять изображения в UserDefaults. чтобы вы могли сохранить имя изображения в UserDefaults.
и используйте приведенные ниже методы для сохранения и извлечения изображений.
сохранение изображения
func saveImage(image: UIImage) -> Bool {
guard let data = UIImageJPEGRepresentation(image, 1) ?? UIImagePNGRepresentation(image) else {
return false
}
guard let directory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) as NSURL else {
return false
}
do {
try data.write(to: directory.appendingPathComponent("fileName.png")!)
return true
} catch {
print(error.localizedDescription)
return false
}
}
восстановление изображения
func getSavedImage(named: String) -> UIImage? {
if let dir = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) {
return UIImage(contentsOfFile: URL(fileURLWithPath: dir.absoluteString).appendingPathComponent(named).path)
}
return nil
}
Комментарии:
1. Спасибо за ответ! Я понял функцию SaveImage, что входным параметром является изображение, которое нам нужно сохранить. Но в функции getSavedImage каким должен быть входной параметр при извлечении сохраненного изображения? Спасибо!
2. Ах, я вижу, входной параметр в функции getSavedImage — это имя каталога файла! Спасибо за помощь!