Есть ли способ получить только сегодняшние фотографии из альбома в ios? Я знаю, как получить альбом, но все фотографии отображаются как временные рамки. Я хочу получить только сегодняшние фотографии или фото последние два дня, как я могу это понять? Спасибо.Получить сегодняшнее фото с альбома в IOS
ответ
Вы можете использовать этот фрагмент, чтобы получить сегодняшнюю фотографию, которая работает на iOS 8. Я изначально отфильтровал активы из недавно добавленного альбома, в котором хранятся фотографии за последние 30 дней или 1000 фотографий. Есть шанс, что пользователь запечатлел более 1000 фотографий за два дня, поэтому я изменил код, чтобы получить все фотографии из библиотеки.
PHFetchOptions *options = [[PHFetchOptions alloc] init];
options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
options.predicate = [NSPredicate predicateWithFormat:@"mediaType = %d",PHAssetMediaTypeImage];
PHFetchResult *assetsFetchResult = [PHAsset fetchAssetsWithOptions:options];
//get day component of today
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents *dayComponent = [calendar components:NSCalendarUnitDay fromDate:[NSDate date]];
NSInteger currentDay = dayComponent.day;
//get day component of yesterday
dayComponent.day = - 1;
NSDate *yesterdayDate = [calendar dateByAddingComponents:dayComponent toDate:[NSDate date] options:0];
NSInteger yesterDay = [[calendar components:NSCalendarUnitDay fromDate:yesterdayDate] day];
//filter assets of today and yesterday add them to an array.
NSMutableArray *assetsArray = [NSMutableArray array];
for (PHAsset *asset in assetsFetchResult) {
NSInteger assetDay = [[calendar components:NSCalendarUnitDay fromDate:asset.creationDate] day];
if (assetDay == currentDay || assetDay == yesterDay) {
[assetsArray addObject:asset];
}
else {
//assets is in descending order, so we can break here.
break;
}
}
До IOS 8, используя ALAssetsLibrary, предположим, что у вас есть фото группы, перечислить группу в обратном порядке, и сделать нечто подобное, как описано выше.
[self.photoGroup enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop) {
NSDate *date = [asset valueForProperty:ALAssetPropertyDate];
}];
не просто запишите код здесь. по крайней мере, добавить короткое предложение, объясняющее, ПОЧЕМУ он делает то, что он делает. - Также упоминаем, что это только для ios8 –
@ Daij-Djan, вы правы, спасибо, что сообщили мне. – gabbler
cool - revesered мой голос –
Вы можете использовать предикат для дня
PHFetchOptions *allPhotosOptions = [PHFetchOptions new];
allPhotosOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
NSPredicate *predicateMediaType = [NSPredicate predicateWithFormat:@"mediaType = %d",PHAssetMediaTypeImage];
NSDate *date = [[NSDate date] beginningOfDay];
NSPredicate *predicateDate = [NSPredicate predicateWithFormat:@"creationDate >= %@", date];
NSCompoundPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[predicateDate, predicateMediaType]];
allPhotosOptions.predicate = compoundPredicate;
PHFetchResult *allPhotosResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:allPhotosOptions];
Где
@implementation NSDate (Utils)
- (NSDate *)beginningOfDay {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:CYCalendarUnitYear | CYCalendarUnitMonth | CYCalendarUnitDay fromDate:self];
return [calendar dateFromComponents:components];
}
Это на самом деле гораздо лучший ответ, чем принятый. Это не нужно извлекать все изображения, а затем отфильтровывать их. и только с одной строкой кода. :) –
Swift 3 версии с диапазоном дат:
let fromDate = // the date after which you want to retrieve the photos
let toDate // the date until which you want to retrieve the photos
let options = PHFetchOptions()
options.predicate = NSPredicate(format: "creationDate > %@ && creationDate < %@", fromDate as CVarArg, toDate as CVarArg)
//Just a way to set order
let sortDescriptor = NSSortDescriptor(key: "creationDate", ascending: false)
options.sortDescriptors = [sortDescriptor]
return PHAsset.fetchAssets(with: .image, options: options)
У вас есть опечатка во втором типе аргументов. –
Спасибо. Это продолжалось долго. :) –
Вы просто меняете это неправильно. «CVarArg» был правильным, просто во втором параметре у вас был «CVarGArg». Извините за недопонимание ;) –
- 1. Получить фото с альбома ID facebook sdk
- 2. Получить идентификатор альбома с фото id
- 3. Удалить фото из альбома или библиотеки в IOS
- 4. Как я могу получить ВСЕ фото с альбома facebook?
- 5. Воспроизведение фильмов из альбома в «Фото»
- 6. Получить фото профиля с Facebook в iOS
- 7. Выбор фото id, small_src из определенного альбома
- 8. Django - выберите случайное фото из каждого альбома
- 9. Facebook Api v2.2 - получить подсчитывать фото акции альбома
- 10. Facebook Фото Загрузить на странице альбома
- 11. Получить фото с сервера android на iOS
- 12. Как получить сегодняшнее время начала?
- 13. iOS Сегодняшнее расширение виджета - анимация UISlider
- 14. Сегодняшнее расширение связывается с главным приложением
- 15. Удалить фото из пользовательского фотоальбома ios
- 16. Как получить все фото с альбома facebook с помощью fbsdk 3.0 в android
- 17. Получить фотографии с определенного альбома Facebook SDK
- 18. Получить идентификатор альбома Spotipy из альбома
- 19. Как получить Facebook Фото альбомы для iOS?
- 20. Извлечение обложки MP3-альбома в iOS
- 21. iOS: проблема Сохранение фото
- 22. iOS создать галерею фото от BLOB
- 23. Сегодняшнее расширение с помощью SpriteKit
- 24. Отображение обложки альбома facebook фото _n вместо _s
- 25. Android Как получить Art Art (фото)
- 26. регулировка контраста в iOS фото
- 27. Как получить песни с альбома в Android?
- 28. Facebook график апи фото загрузить на фан-страницу альбома
- 29. Публикация на стене фото из альбома, но больше
- 30. Как получить обложку фото каждого альбома facebook с помощью facebook android sdk
сделать это с помощью AssetLibrary framework: http://stackoverflow.com/questions/18575691/filter-alassets-by-year –