iOS UIImagePickerController: любой способ получить дату выбранного изображения?

#ios #uiimagepickercontroller

#iOS #uiimagepickercontroller

Вопрос:

В моем приложении я использую UIImagePickerController, который вызывает

 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
  

при успешном завершении.
Дело в том, что мне нужна дата, в которую было сделано изображение. Если пользователь сделал новый снимок, я, конечно, могу взять текущую дату, но что я могу сделать, если пользователь выбрал изображение из своей фотопленки или другое сохраненное изображение?

Ответ №1:

Вы можете использовать этот код для фотографий и видео, извлеченных из альбомов. информация является вторым параметром в упомянутом методе делегирования.

 NSURL *mediaUrl = info[UIImagePickerControllerReferenceURL];
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];

[assetsLibrary assetForURL:mediaUrl resultBlock:^(ALAsset *asset) {
    NSDate *date = [asset valueForProperty:ALAssetPropertyDate];
    // ...
} failureBlock:nil];
  

Кроме того, чтобы заставить его работать, вам необходимо включить в project AssetsLibrary framework.

Комментарии:

1. Отлично работает, но опечатка в 1-й строке: должен быть mediaUrl вместо url

2. UIImagePickerControllerReferenceURL устарел в iOS 11

Ответ №2:

 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    NSDictionary *metadataDictionary = (NSDictionary *)[info valueForKey:UIImagePickerControllerMediaMetadata];
        // do something with the metadata

    NSLog(@"meta : %@ nn",metadataDictionary);
}
  

затем

из этого ключа нужно получить значение ключа «DateTime»

Комментарии:

1. к сожалению, согласно документации, UIImagePickerControllerMediaMetadata доступен только с iOS4.1 и доступен только в том случае, если кто-то сделал новый снимок, но не для изображений из библиотеки / альбома 🙁

Ответ №3:

iOS 11 , Swift 4

 import Photos
extension ViewController : UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    public func imagePickerController(_ picker: UIImagePickerController,
                                      didFinishPickingMediaWithInfo info: [String : Any]) {
        if let asset = info[UIImagePickerControllerPHAsset] as? PHAsset,
            let creationDate = asset.creationDate {
            print(creationDate) // Here is the date when your image was taken
        }
        dismiss(animated: true)
    }
}
  

Комментарии:

1. UIImagePickerControllerReferenceURL устарел в iOS 11