我正在使用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) 我需要显示带有图像数量的相机胶卷相册.我正在使用以下代码来获取相机胶卷相册.
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创建的相册,如相机胶卷.对于用户创建的常规相册,将返回正确的值.我做错了什么或这是一个错误?
如果是,有没有其他方法来获得正确的图像计数?
我正在遵循苹果的示例代码“ 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) 我们正在开发一个存储应用程序,除了其他功能外,还可以通过云同步和备份用户设备上的照片.我们一起使用文件大小和图像名称来形成临时哈希以进行比较.我们面临的问题是,当设备上有大量照片的用户(> 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中不是这种情况).
有谁知道加速这种方式的方法?也许批量检索?
先感谢您.
我是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个截图).
我第一次开始尝试 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)