问题标签 [icloud-photo-library]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 确定 iOS 设备上可用的最大 PHAsset 图像大小
如何确定PHAsset
iOS 设备上可用的最大图像尺寸,其中“可用”是指当前在设备上,不需要从 iCloud 照片库进行任何网络下载?
我一直在开发一个应用程序,其中一组缩略图显示在一个UICollectionView
(很像照片应用程序)中,然后用户可以选择一个图像来查看它的全尺寸。如有必要,将从 iCloud 下载完整大小的图像。但是,我想向用户展示图像的最大可能版本,直到完整尺寸可用。
照片框架的工作方式相当奇怪:
在集合视图中,我使用186x186 像素(由于视网膜缩放而使尺寸加倍)PHCachingImageManager
来缓存(以及后来的请求)图像。targetSize
UICollectionViewCell
效果非常好,滚动速度非常快,并且在用图像填充单元格时没有延迟。检查返回图像的大小,它们都是大约 342x256 像素。那是在我的 iPhone 6 上启用了 iCloud 照片库并启用了“优化存储”,因此对于大多数图像来说,设备上只存储了小缩略图。
然而,奇怪的是,如果我随后请求任何图像的全尺寸(或更大)版本,无论是使用该选项PHCachingImageManager
还是PHImageManager.defaultManager()
使用该PHImageRequestOptionsDeliveryMode.Opportunistic
选项,返回的第一张(低质量)图像是一个看起来很小的 60x45 像素邮票全屏显示太可怕了,直到最终下载完整尺寸的图像来替换它。
显然,设备上已经有更大的缩略图 (342x256),因为它们刚刚显示在集合视图中!那么为什么在下载完整尺寸之前它不将它们作为第一个“低质量”图像返回?为了确保 342x256 图像确实已经在设备上,我在飞行模式下运行了代码,因此没有发生网络访问。
我发现,如果我请求任何最大为 256x256 的尺寸,我会返回 342x256 的图像。一旦我变大(甚至 1 像素),它首先会返回 60x45 图像,然后尝试下载完整尺寸的图像。
我已经更改了我的代码,首先发出一个 256x256 的请求,然后是一个完整尺寸的请求PHImageRequestOptionsDeliveryMode.HighQualityFormat
(它不会返回一个微小的中间图像),而且效果很好。这也是 iOS 照片应用程序必须做的事情,因为它在下载完整图像时会显示相对高质量的缩略图。
那么,在这样的背景下,我怎么知道设备图像的最大尺寸是PHAsset
多少?256x256 是一个神奇的数字,还是取决于 iCloud 照片库如何优化空间(基于库的大小和可用的设备存储空间)?
当然,这似乎是一个错误,照片框架没有返回当前可用的最大图像(当被要求提供比当前更大的尺寸时),并且要获得最大尺寸,您必须要求该尺寸或更小,因为如果你要求更大,你会得到一个 60x45 的缩影!奇怪。
更新:提交给 Apple 的错误报告:https
://openradar.appspot.com/25181601
演示错误的示例项目:https ://github.com/mluisbrown/PhotoKitBug
ios - PHAsset fetch 将 50% 的集合返回为 nil
当我把 aPHAssetCollection
交给PHAsset.fetchAssetsInAssetCollection:options
我时,我会得到一个 s 的集合PHAsset
。对于每UIImage
一个回馈给我,也有一个 nil 值回馈给我。
以下是我的cellForItemAtIndexPath:indexPath
方法。
如果我不放零支票
然后 UICollectionView 什么都不渲染。一旦我添加了 nil 检查,集合视图就会开始渲染照片库资产集合中的图像。
为什么返回给我的 nil 数量总是与UIImage
对象数量相同?我的请求中有什么我搞砸的吗?
这是我print
上面调用的输出。
更新:
似乎这发生在我返回的每个 PHAssetCollection 中。
更新 2:
这是我试图复制的 WWDC 示例中的部分内容。我确实注意到它确实的一件事,但我不是,它是标记单元格,以防止在重复使用时覆盖它。
objective-c - 在我的应用中打开 iCloud 图片
我必须在我的应用程序中显示所有 iCloud 图片。所以我必须使用这些照片进行进一步的操作。是否有任何框架可用于实现 iCloud 功能。我检查了各种代码和 tuts,但无法从 iCloud 中获取图像。
ios - iOS 删除的照片如何重新出现
在 iOS 11 上,我打开了 iCloud 照片库。* 我删除了几百张照片。* 我删除了最近删除的照片文件夹中的所有内容 * 我关闭了 iCloud 照片库(其他设备仍在使用它,所以未删除的照片保留在手机上) * 此时手机中没有包含已删除的照片 * 一周后来我重新打开了 iCloud 照片库 * 几天后,从库中删除的照片然后从删除的照片文件夹中又回来了
怎么会这样?我读到从使用库的任何设备中删除的照片会从所有设备中删除(因为这些照片不再在库中),并且删除最近删除的文件夹中的所有内容应该使其永久化。
objective-c - 目标c在不下载媒体文件的情况下获取iCloud中图像和视频的元数据
我有以下代码,可让我访问可能保存在本地或 iCloud 中的视频文件的元数据。我不确定这是否是在不下载视频文件的情况下仅访问元数据的最佳方式。
此代码有效,但问题是我的测试设备已将所有照片库备份到 iCloud,而这对于视频来说进展非常缓慢。所以我怀疑这段代码是从 iCloud 下载视频,然后我可以访问元数据。
关于如何加快速度的任何建议?提前致谢。
swift - MLMediaLibrary - 显示照片库 - Swift 代码错误 - macOS
尝试显示照片库中的照片。下面的 Apple 示例代码无法正常工作。它不会等待通知,而是尝试启动在“部分中的项目数”处崩溃的集合视图,因为没有要显示的照片数据。
感谢您 Swift 大师的任何帮助!