Сохранить PHAsset в фотопленку после редактирования

Я включил эту структуру в свое приложение для выбора изображений из фотопленки. Мое приложение позволяет пользователям выбирать одно или несколько изображений, добавлять к изображению строку временной метки и сохранять новое изображение в ленте камеры пользователя. Сейчас он сохраняет отредактированные изображения как новое изображение, но я пытаюсь понять, как вместо этого обновить существующее изображение в фотопленке пользователя. Я знаю, что должен быть в состоянии сделать это, используя платформу 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. Может ли кто-нибудь указать мне правильное направление для включения этого в мой код? Спасибо!


person chickenparm    schedule 29.01.2017    source источник
comment
github/Program-Mattneub iOS-Book-Examples/blob/   -  person matt    schedule 08.02.2017
comment
@matt Спасибо, я посмотрю на это!   -  person chickenparm    schedule 08.02.2017
comment
Вы можете вспомнить, что мы уже говорили об этом в связи с вашим вопросом здесь: -image-to-camera-roll" title="прекращено из-за проблем с памятью при сохранении измененного изображения в фотопленку"> stackoverflow.com/questions/41052024/   -  person matt    schedule 08.02.2017