Any idea why this would return nil for 'thisImage' after adding in the requestImageOption settings? If options is set to nil thisAsset returns a value but it's a low res image, definitely not original high res. I'm trying to return the original image from the PHAsset (thisAsset)
if let thisAsset:PHAsset = info[UIImagePickerController.InfoKey.phAsset] as? PHAsset {
arrImageIdentifiers.append(thisAsset.localIdentifier)
let manager = PHImageManager.default()
let requestImageOption = PHImageRequestOptions()
requestImageOption.deliveryMode = PHImageRequestOptionsDeliveryMode.highQualityFormat
manager.requestImage(for: thisAsset, targetSize: PHImageManagerMaximumSize, contentMode: PHImageContentMode.default, options: requestImageOption, resultHandler: {(thisImage, _) in
Object.tempImage = thisImage
print("Picture metadata: \(thisAsset)")
let creationDate = thisAsset.creationDate
PhotoMeta.createDate = creationDate
})
//Get a reference to the camera view controller and call the savePhoto method
let cameraVC = self.selectedViewController as? CameraViewController
if let cameraVC = cameraVC {
cameraVC.savePhoto(image: Object.tempImage!)
}
}
Set requestOptions's isSynchronus
to true
to resolve your problem:
let requestImageOption = PHImageRequestOptions()
requestImageOption.deliveryMode = PHImageRequestOptionsDeliveryMode.highQualityFormat
requestImageOption.isSynchronous = true
manager.requestImage(for: thisAsset, targetSize: PHImageManagerMaximumSize, contentMode: PHImageContentMode.default, options: requestImageOption, resultHandler: {(thisImage, _) in
//....
}