#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