标签: phassetcollection

iOS PHAssetCollection localizedTitle始终返回英文名称

我正在使用Apples Photos Framework将PHAssetCollections加载到我的应用程序中.我总是得到智能收藏的英文名称.例如,我得到'收藏'而不是'收藏家'(瑞典语).我认为localizedTitle属性将返回模拟器或iPhone运行的语言.(在具有瑞典语和地区的iPhone上运行).

有人遇到过这种情况么?示例代码:

NSArray *collectionsFetchResults;
NSMutableArray *localizedTitles = [[NSMutableArray alloc] init];

PHFetchResult *smartAlbums = [PHAssetCollection       fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum
                                                                            subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
PHFetchResult *syncedAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum
                                                                       subtype:PHAssetCollectionSubtypeAlbumSyncedAlbum options:nil];
PHFetchResult *userCollections = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil];

// Add each PHFetchResult to the array
collectionsFetchResults = @[smartAlbums, userCollections, syncedAlbums];

for (int i = 0; i < collectionsFetchResults.count; i ++) {

    PHFetchResult *fetchResult = collectionsFetchResults[i];

    for (int x = 0; x < fetchResult.count; x ++) {

        PHCollection *collection = fetchResult[x];
        localizedTitles[x] = collection.localizedTitle;
        NSLog(@"%@", collection.localizedTitle); //<= Always …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c ios photosframework phassetcollection

8
推荐指数
1
解决办法
910
查看次数

estimatedAssetCount返回错误的计数

我需要显示带有图像数量的相机胶卷相册.我正在使用以下代码来获取相机胶卷相册.

let smartCollections = PHAssetCollection.fetchAssetCollectionsWithType(.SmartAlbum, subtype: .SmartAlbumUserLibrary, options: nil)
smartCollections.enumerateObjectsUsingBlock { object, index, stop in
    if let collection = object as? PHAssetCollection {
        print(collection.estimatedAssetCount)
    }
}
Run Code Online (Sandbox Code Playgroud)

我在照片应用中的相机胶卷中只有28张图像.但该estimatedAssetCount属性返回值9223372036854775807!

这仅适用于OS创建的相册,如相机胶卷.对于用户创建的常规相册,将返回正确的值.我做错了什么或这是一个错误?

如果是,有没有其他方法来获得正确的图像计数?

count ios swift photokit phassetcollection

5
推荐指数
1
解决办法
2227
查看次数

PHAssets/PHAssetCollection/PHCollectionList 和文件夹

我正在遵循苹果的示例代码“ ExampleappusingPhotosframework ”。

在 PHAssets/PHAssetCollection 主题中,我注意到可能存在“文件夹”。这些可以通过 Mac 的照片应用程序或较旧的 iPhoto 应用程序等创建而出现。

文件夹可能存在 PHAssetCollection 数量,并且该文件夹可能包含未知级别的嵌套文件夹,最后以相册结尾。

因此,如果我在照片库中有嵌套文件夹,即使上面的示例项目也会崩溃。大多数应用程序似乎只是忽略并且根本不显示这些文件夹。

举个例子,假设这个例子存在:

在此输入图像描述

文件夹级别 1 > 文件夹级别 2 > 自定义相册 > 图像 1、图像 2

iOS 照片应用程序如何处理它:

在此输入图像描述

任务

在根相册列表中的用户相册下,应该可以看到“文件夹级别 1”。点击该按钮后,我想列出所有子文件夹中的所有图像,无论子级别如何......

视图加载

override func viewDidLoad() {
    super.viewDidLoad()

    let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(self.addAlbum))
    self.navigationItem.rightBarButtonItem = addButton


    // Create a PHFetchResult object for each section in the table view.
    let allPhotosOptions = PHFetchOptions()
    allPhotosOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]
    allPhotos = PHAsset.fetchAssets(with: allPhotosOptions)
    smartAlbums = …
Run Code Online (Sandbox Code Playgroud)

photos ios swift phasset phassetcollection

5
推荐指数
1
解决办法
3908
查看次数

有没有办法加快像文件大小一样获取PHAsset数据?

我们正在开发一个存储应用程序,除了其他功能外,还可以通过云同步和备份用户设备上的照片.我们一起使用文件大小和图像名称来形成临时哈希以进行比较.我们面临的问题是,当设备上有大量照片的用户(> 10K)首次注册时,获取和检索照片的文件大小需要很长时间~3.5分钟.

我们像这样使用PHImageManager:

photoManager.requestImageData(for: asset, options: options, resultHandler: callback)
Run Code Online (Sandbox Code Playgroud)

这是从这里调用和处理的:

let semaphore = DispatchSemaphore(value: 0)
    let operation = GetOriginalImageOperation(photoManager: self.photoManger,
                                              asset: asset) { (data, string, orientation, dict) in
        if let wrapDict = dict, let dataValue  = data {
            if let name = asset.originalFilename {
                originalFileName = name
            }
            if let unwrapedUrl = wrapDict["PHImageFileURLKey"] as? URL {
                url = unwrapedUrl
            }
            size = UInt64(dataValue.count)
            md5 = String(format: "%@%i", originalFileName, size)

            semaphore.signal()
        } else {
            semaphore.signal()
        }
    }
Run Code Online (Sandbox Code Playgroud)

文件大小不是元数据的一部分,因此检索需要时间(例如在Android中不是这种情况).

有谁知道加速这种方式的方法?也许批量检索?

先感谢您.

ios swift phasset phassetcollection phassetslibrary

5
推荐指数
0
解决办法
164
查看次数

在swift中获取截图(专辑)计数

我是Swift的新手,我正在尝试创建一个函数,只需使用fetchAssetCollections返回截屏相册中的照片数量

我有

func getNumScreenshots() -> Int {

    let collection:PHFetchResult =  
     PHAssetCollection.fetchAssetCollections(with: .album, subtype:.smartAlbumScreenshots, options: nil)

    return collection.count
}
Run Code Online (Sandbox Code Playgroud)

但是,这总是返回3,我不知道为什么(我的iPhone上有600个截图).

ios swift phassetcollection

3
推荐指数
1
解决办法
775
查看次数

MacOS PhotoKit - 列出所有用户创建的智能相册?

我第一次开始尝试 macOS 开发。我正在尝试查询我在 macOS 照片应用程序中创建的智能相册列表。正如您在此屏幕截图中看到的,我定义了 18 个智能相册和 1 个常规相册。

相册截图

但是,当我获取智能相册时,PHAssetCollection我看不到我定义的智能相册。以下是我用来获取照片总数、智能相册和普通相册的代码:

let allPhotosOptions = PHFetchOptions()
allPhotosOptions.includeAssetSourceTypes = [.typeUserLibrary]

allPhotosOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]
let allPhotos = PHAsset.fetchAssets(with: allPhotosOptions)
let photoCount = allPhotos.count
print("photoCount=\(photoCount)")

print("***********************************")
print("Smart Albums")
print("***********************************")

let smartAlbumsOptions = PHFetchOptions()
smartAlbumsOptions.includeAssetSourceTypes = [.typeUserLibrary]
let smartAlbums = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .any, options: smartAlbumsOptions)
let smartAlbumCount = smartAlbums.count
print("smartAlbumCount=\(smartAlbumCount)")
smartAlbums.enumerateObjects { (collection, index, stop) in
    print("Collection \(index + 1):")
    print("\tlocalizedTitle=\(String(describing: collection.localizedTitle))")
    print("\tassetCollectionType=\(collection.assetCollectionType)")
    print("\testimatedAssetCount=\(collection.estimatedAssetCount)")
    print("\tstartDate=\(String(describing: collection.startDate)), endDate=\(String(describing: collection.endDate))")
}

print("***********************************") …
Run Code Online (Sandbox Code Playgroud)

macos swift photokit phassetcollection

2
推荐指数
1
解决办法
789
查看次数