Я включил эту структуру в свое приложение для выбора изображений из фотопленки. Мое приложение позволяет пользователям выбирать одно или несколько изображений, добавлять к изображению строку временной метки и сохранять новое изображение в ленте камеры пользователя. Сейчас он сохраняет отредактированные изображения как новое изображение, но я пытаюсь понять, как вместо этого обновить существующее изображение в фотопленке пользователя. Я знаю, что должен быть в состоянии сделать это, используя платформу Photos, выпущенную с iOS 8, но я действительно борюсь. Я смотрел сессию WWDC 2014 года «Введение в платформу фотографий», но она написана на языке Objective-C, и у меня возникли проблемы с переводом.
Вот мой код для выбора изображения из фотопленки. Я получаю массив PHAssets.
func selectImageFromCameraRoll(mediaType: String) {
newMedia = false
let newImagePicker = BSImagePickerViewController()
newImagePicker.doneButton = UIBarButtonItem(title: "Stamp", style: UIBarButtonItemStyle.done, target: self, action: nil)
bs_presentImagePickerController(newImagePicker, animated: true,
select: { (asset: PHAsset) -> Void in
print("Selected")
}, deselect: { (asset: PHAsset) -> Void in
print("Deselected")
}, cancel: { (assets: [PHAsset]) -> Void in
print("Cancel")
}, finish: { (assets: [PHAsset]) -> Void in
for asset in assets {
self.saveAssetToRoll(asset: asset)
}
print("Finished")
}, completion: nil)
}
Вот мой код для сохранения обновленного изображения в фотопленке.
func saveAssetToRoll(asset: PHAsset) {
let manager = PHImageManager.default()
let option = PHImageRequestOptions()
var pickedImage = UIImage()
option.isSynchronous = true
option.deliveryMode = .highQualityFormat
manager.requestImage(for: asset, targetSize: PHImageManagerMaximumSize, contentMode: .default, options: option, resultHandler: {(result, info)->Void in
pickedImage = result!})
let width = pickedImage.size.width
let height = pickedImage.size.height
let location = Locations(rawValue: UserDefaults.standard.value(forKey: "location") as! String)!
var point = CGPoint(x: 0, y: 0)
switch location {
case .topLeft:
point = CGPoint(x: 30, y: 50)
case .topRight:
point = CGPoint(x: width - 30, y: 50)
case .bottomLeft:
point = CGPoint(x: 30, y: height - 50)
case .bottomRight:
point = CGPoint(x: width - 30, y: height - 50)
case .center:
point = CGPoint(x: width / 2, y: height / 2)
case .topCenter:
point = CGPoint(x: width / 2, y: 50)
case .bottomCenter:
point = CGPoint(x: width / 2, y: height - 50)
}
let savedFormat = UserDefaults.standard.value(forKey: "format") as! String
var date = Date()
if !currentDateBool {
date = UserDefaults.standard.value(forKey: "selectedDate") as! Date
}
let timestampText = getFormattedDateFromFormatType(formatType: savedFormat, date: date) as NSString
let timestampImage = textToImage(drawText: timestampText, inImage: pickedImage, atPoint: point)
UIImageWriteToSavedPhotosAlbum(timestampImage, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)
}
Из документации Apple кажется, что мне нужно использовать комбинацию PHContentEditingInput и PHContentEditingOutput. Может ли кто-нибудь указать мне правильное направление для включения этого в мой код? Спасибо!