- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 YangMingShan作为照片选择器,这正是我所需要的,但是当用户有很多照片时我遇到了问题。
我一直在使用包含 25,000 多张照片和 250 个相册的手机进行测试,当我展示 View Controller 时,应用程序在 collectionView 加载之前卡住了大约 30 秒。
这是有问题的代码,我试图弄清楚是否有更优化的方法来获取结果。
- (void)fetchCollections
{
NSMutableArray *allAblums = [NSMutableArray array];
PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
__block __weak void (^weakFetchAlbums)(PHFetchResult *collections);
void (^fetchAlbums)(PHFetchResult *collections);
weakFetchAlbums = fetchAlbums = ^void(PHFetchResult *collections) {
// create fecth options
PHFetchOptions *options = [PHFetchOptions new];
options.predicate = [NSPredicate predicateWithFormat:@"mediaType = %d",PHAssetMediaTypeImage];
options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
for (PHCollection *collection in collections) {
if ([collection isKindOfClass:[PHAssetCollection class]]) {
PHAssetCollection *assetCollection = (PHAssetCollection *)collection;
PHFetchResult *assetsFetchResult = [PHAsset fetchAssetsInAssetCollection:assetCollection options:options];
if (assetsFetchResult.count > 0) {
[allAblums addObject:@{@"collection": assetCollection
, @"assets": assetsFetchResult}];
}
}
else if ([collection isKindOfClass:[PHCollectionList class]]) {
// If there are more sub-folders, dig into the collection to fetch the albums
PHCollectionList *collectionList = (PHCollectionList *)collection;
PHFetchResult *fetchResult = [PHCollectionList fetchCollectionsInCollectionList:(PHCollectionList *)collectionList options:nil];
weakFetchAlbums(fetchResult);
}
}
};
PHFetchResult *topLevelUserCollections = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil];
fetchAlbums(topLevelUserCollections);
for (PHAssetCollection *collection in smartAlbums) {
PHFetchOptions *options = [PHFetchOptions new];
options.predicate = [NSPredicate predicateWithFormat:@"mediaType = %d",PHAssetMediaTypeImage];
options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
PHFetchResult *assetsFetchResult = [PHAsset fetchAssetsInAssetCollection:collection options:options];
if (assetsFetchResult.count > 0) {
// put the "all photos" in the first index
if (collection.assetCollectionSubtype == PHAssetCollectionSubtypeSmartAlbumUserLibrary) {
[allAblums insertObject:@{@"collection": collection
, @"assets": assetsFetchResult} atIndex:0];
}
else {
[allAblums addObject:@{@"collection": collection
, @"assets": assetsFetchResult}];
}
}
}
self.collectionItems = [allAblums copy];
}
最佳答案
转到 YMSPhotoPickerViewController.m 并更改功能。
- (void)refreshPhotoSelection
{
if ([self shouldOrderSelection]) {
PHFetchResult *fetchResult = self.currentCollectionItem[@"assets"];
for (NSInteger i=0; i<self.selectedPhotos.count; i++) {
PHAsset *needReloadAsset = self.selectedPhotos[i];
YMSPhotoCell *cell = (YMSPhotoCell *)[self.photoCollectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:[fetchResult indexOfObject:needReloadAsset]+1 inSection:0]];
cell.selectionOrder = i+1;
[self.photoCollectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:[fetchResult indexOfObject:needReloadAsset]+1 inSection:0] animated:NO scrollPosition:UICollectionViewScrollPositionNone];
}
}
}
关于ios - 通过 PHFetchResult 获取照片非常慢,有很多照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45746973/
我只是想将位于名为“MyFolder”的自定义文件夹中的照片访问到我的 UICollectionView。我可以使用以下代码轻松地处理“所有照片和视频”,但我不知道如何过滤结果以仅包含我的文件夹名称:
我正在尝试从照片库中获取两个日期和 I am getting the images successfully. 范围内的图像使用 PHAsset 库 现在的问题是我无法在同一天的两次之间(例如中午 1
我正在尝试构建一个简单的照片选择器,目前有两个选项:最近和收藏夹。我正在做的是尝试在 creationDate 之前获取所有照片,但这是在我的数据源中以错误的顺序返回图像。数据源的开头是几年前的照片,
我正在开发一个 iOS 应用程序,它可以从照片库中获取视频,并且它始终有效。我刚刚在不同的设备上测试了该应用程序(这不是我测试的第一个),当我使用检索到的数据时它崩溃了,我不明白为什么...... 这
NSString *predicateFormat = [NSString stringWithFormat: @"mediaSubtype = %zd", PHAssetMediaSubtypeVi
我正在使用 YangMingShan作为照片选择器,这正是我所需要的,但是当用户有很多照片时我遇到了问题。 我一直在使用包含 25,000 多张照片和 250 个相册的手机进行测试,当我展示 View
在 swift 3 中,该方法向我显示“'enumerateObjects' 的使用不明确”,发生了什么。我该怎么办? extension PHFetchResult { public func as
我遇到了以下编译错误: Cannot invoke 'enumerateObjectsUsingBlock' with an argument list of type '((_, _, _) ->
我正在尝试向 PHFetchResult 添加扩展以将结果对象作为正确类型的数组拉出 - 到目前为止,我无法弄清楚如何避免下面看到的复制。除了类型约束之外,以下扩展是相同的。如果我使用 PHObjec
Swift 和 iOS 开发的新手。有人能告诉我如何将两次调用 PHAssetCollection.fetchAssetCollectionsWithType 的结果结合起来吗?具体来说,我试图获得一
我正在尝试使用 iOS 8 中的新照片框架获取在设备上拍摄的最后一张照片的缩略图。我现在拥有的执行此操作的代码如下: PHFetchOptions *fetchOptions = [PHFetchOp
我可以使用以下代码从照片库中获取照片列表。 guard let assetCollection = collection as? PHAssetCollection
不太确定为什么我得到“在 Swift 3 中‘枚举对象’的使用不明确。 let collections = PHAssetCollection.fetchAssetCollections(with:
这是我的代码: var galleryController: GalleryController! var albums: PHFetchResult = PHFetchResult(
我是一名优秀的程序员,十分优秀!