Съемка изображения:
Взгляните на класс UIImagePickerController
и используйте его для съемки. Снимки с этим НЕ сохранят изображения автоматически в галерее iOS.
Упомянутый UIImagePickerController
уведомит делегата UIImagePickerControllerDelegate
и вызовет функцию func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: Any])
.
Из второго параметра, информационного словаря, вы можете запросить большинство метаданных изображений, livePhoto и так далее. Необходимые ключи можно найти внутри расширения UIImagePickerController
, которое называется UIImagePickerController.InfoKey
.
.
Например, вот как я тогда получаю координаты изображений, если они доступны:
if let imageURL = info[UIImagePickerControllerReferenceURL] as? URL {
let result = PHAsset.fetchAssets(withALAssetURLs: [imageURL], options: nil)
if let asset = result.firstObject, let location = asset.location {
let lat = location.coordinate.latitude
let lon = location.coordinate.longitude
print("Here's the lat and lon \(lat) + \(lon)")
}
}
Сохранение изображения на телефоне в вашем приложении?:
Я использую JSONEncoder
. Вы можете использовать этот класс для кодирования, а затем снова декодировать свой пользовательский класс изображений.
Ваш пользовательский класс изображений, который имеет UIImage и все другие свойства, должен затем реализовывать протокол Codable
.
Затем с помощью JSONEncoder
создайте Data
объекта с помощью метода encode()
и сохраните его в частном месте приложения с помощью FileManager
.
Позже вы можете снова прочитать все файлы из этого места с помощью FileManager
, decode()
с JSONEncoder
, и вуаля, у вас снова будут все ваши изображения в виде вашего пользовательского класса изображений.
Сохранение изображения в галерее пользователей «Экспорт»:
Вот пример того, как я снова сохраняю это изображение в галерее пользователей как способ его экспорта:
private static func saveImageToGallery(picture: UIImage, lat: Double?, lon: Double?) {
PHPhotoLibrary.shared().performChanges({
let request = PHAssetCreationRequest.creationRequestForAsset(from: picture)
if let _lat = lat, let _lon = lon {
request.location = CLLocation(latitude: _lat, longitude: _lon)
}
})
}
Надеюсь, этого будет достаточно, чтобы направить вас на правильный путь.