Photos(PHFetchResultChangeDetails)

2023-05-16

Photos(PHChange)

Photos(PHObjectChangeDetails)

Photos(PHFetchResultChangeDetails)


PHFetchResultChangeDetails主要用于记录PHFetchResult的变动,这样可以同时判断多个数据是否有变动。

1 获取PHFetchResult

/// 变化前
public var fetchResultBeforeChanges: PHFetchResult { get }

/// 变化后
public var fetchResultAfterChanges: PHFetchResult { get }

2 获取变动信息

/// 是否有变动
public var hasIncrementalChanges: Bool { get }

/// 删除对象的位置
public var removedIndexes: NSIndexSet? { get }
/// 删除的对象
public var removedObjects: [PHObject] { get }

/// 插入对象的位置
public var insertedIndexes: NSIndexSet? { get }
/// 插入的对象
public var insertedObjects: [PHObject] { get }

/// 有变化的对象位置
public var changedIndexes: NSIndexSet? { get }
/// 有变化的对象
public var changedObjects: [PHObject] { get }

/// 移动照片
public func enumerateMovesWithBlock(handler: (Int, Int) -> Void)

/// 是否有移动
public var hasMoves: Bool { get }

3 比较PHFetchResult

/// 获取两个PHFetchResult的差异
///
/// - parameter fromResult : PHFetchResult
/// - parameter toResult : PHFetchResult
/// - parameter changedObjects : [PHObject]
///
/// - returns: PHFetchResultChangeDetails
public convenience init(fromFetchResult fromResult: PHFetchResult, toFetchResult toResult: PHFetchResult, changedObjects: [PHObject])

4 实战演练

func photoLibraryDidChange(changeInfo: PHChange!) {

    // Photos may call this method on a background queue;
    // switch to the main queue to update the UI.
    dispatch_async(dispatch_get_main_queue()) {

        // Check for changes to the displayed album itself
        // (its existence and metadata, not its member assets).
        if let albumChanges = changeInfo.changeDetailsForObject(self.displayedAlbum) {
            // Fetch the new album and update the UI accordingly.
            self.displayedAlbum = albumChanges.objectAfterChanges as PHAssetCollection
            self.navigationController.navigationItem.title = self.displayedAlbum.localizedTitle
        }

        // Check for changes to the list of assets (insertions, deletions, moves, or updates).
        if let collectionChanges = changeInfo.changeDetailsForFetchResult(self.assetsFetchResults) {

            // Get the new fetch result for future change tracking.
            self.assetsFetchResults = collectionChanges.fetchResultAfterChanges

            if collectionChanges.hasIncrementalChanges {

                // Get the changes as lists of index paths for updating the UI.
                var removedPaths: [NSIndexPath]?
                var insertedPaths: [NSIndexPath]?
                var changedPaths: [NSIndexPath]?
                if let removed = collectionChanges.removedIndexes {
                    removedPaths = self.indexPathsFromIndexSet(removed)
                }
                if let inserted = collectionChanges.insertedIndexes {
                    insertedPaths = self.indexPathsFromIndexSet(inserted)
                }
                if let changed = collectionChanges.changedIndexes {
                    changedPaths = self.indexPathsFromIndexSet(changed)
                }

                // Tell the collection view to animate insertions/deletions/moves
                // and to refresh any cells that have changed content.
                self.collectionView.performBatchUpdates(
                    {
                        if removedPaths {
                            self.collectionView.deleteItemsAtIndexPaths(removedPaths)
                        }
                        if insertedPaths {
                            self.collectionView.insertItemsAtIndexPaths(insertedPaths)
                        }
                        if changedPaths {
                            self.collectionView.reloadItemsAtIndexPaths(changedPaths)
                        }
                        if (collectionChanges.hasMoves) {
                            collectionChanges.enumerateMovesWithBlock() { fromIndex, toIndex in
                                let fromIndexPath = NSIndexPath(forItem: fromIndex, inSection: 0)
                                let toIndexPath = NSIndexPath(forItem: toIndex, inSection: 0)
                                self.collectionView.moveItemAtIndexPath(fromIndexPath, toIndexPath: toIndexPath)
                            }
                        }
                    }, completion: nil)
            } else {
                // Detailed change information is not available;
                // repopulate the UI from the current fetch result.
                self.collectionView.reloadData()
            }
        }
    }
}

 


其他

源代码

Swift

参考资料

Photos Framework Reference

PHChange Class Reference

PHFetchResultChangeDetails Class Reference

文档修改记录

时间描述
2016-01-06博文完成

版权所有

CSDN:http://blog.csdn.net/y550918116j

GitHub:https://github.com/937447974/Blog

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Photos(PHFetchResultChangeDetails) 的相关文章

  • Photos 有问题。请从其原始安装位置重新安装应用程序,或与管理员联系的解决方法

    Photos 有问题 请从其原始安装位置重新安装应用程序 xff0c 或与管理员联系 解决方法 看到大神的解决方法有被吓到 xff0c 但是因为怕麻烦 xff0c 又怕自己作死 xff0c 找到了另一种解决方法 xff08 每个人情况可能不
  • Photos(PHFetchResultChangeDetails)

    Photos PHChange Photos PHObjectChangeDetails Photos PHFetchResultChangeDetails PHFetchResultChangeDetails主要用于记录PHFetchRe
  • 重拾旧时光——Bringing-Old-Photos-Back-to-Life

    Bringing Old Photos Back to Life Bringing Old Photos Back to Life项目简介Bringing Old Photos Back to Life项目资源下载与配置Bringing O
  • Google+ 照片 api [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 有 Google 照片 gdata API 吗 我正在使用谷歌 picasa API但 picasa 对照片有 1 GB 的限制 我想使用我的脚本上
  • 如何知道 PHAsset 是否已被修改?

    更具体地说 你如何知道一个PHAsset标的资产的当前版本是否与原始版本不同 我的用户只需在必要时在当前资产或原始资产之间进行选择 然后我需要他们的答案PHImageRequestOptions version 从 iOS 16 开始 PH
  • Android:DCIM 文件夹中的重复照片存储

    我正在使用本机 Android 相机并将文件保存到应用程序数据文件夹 mnt sdcard Pictures 同时 在某些设备上 照片的另一个副本会保存到 DCIM 文件夹中 这是我的代码 private void startStockCa
  • 尝试快速保存捕获的图像时出错

    在我的项目中 我正在捕捉图像 但是当它开始保存图像时 应用程序崩溃并出现以下错误 打开包装时意外发现零 我的代码如下 Library Assets var assetCollection PHAssetCollection var phot
  • 如何从 iPhone 应用程序内将多张照片上传到 Facebook?

    是否有 API 调用可用于从 iPhone 应用程序将多张照片上传到 Facebook 到目前为止我们一次只能做一个 您将需要直接使用 Facebook Connect API iOS SDK 不公开此类功能 您应该查看一下 Publish
  • 从 Android 将图片发布到墙上

    我想将图片张贴到墙上 就像我在 Facebook 网页上所做的那样 我尝试过这两种方式 但都不是我想要的 http facebook stackoverflow com questions 5168145 android post pict
  • 如何通过Flickrj Api访问私人照片?

    我正在通过 Flickr API 进行经过身份验证的调用来访问照片 但我只得到我的公开照片 而没有任何私人照片 下面给出的是我正在使用的代码 Flickr f RequestContext requestContext String fro
  • ror 中使用 Paperclip 进行多次上传

    我正在使用回形针上传一栋建筑物的一张照片 http www youtube com watch v KGmsaXhIdjc我已经用这种方法做到了 但我决定将多张照片上传到一栋建筑 我可以使用回形针来做到这一点还是必须更改它并使用 jQuer
  • 获取 Photos.app 中的图像数量?

    我知道可以使用 ALAssetsLibrary 获取 Photos app 中的图像 但如何获取 Photos app 中的照片总数 我几乎正在尝试检查照片的数量 因为我正在使用此问题的代码获取 Photos app 中的最后一张图像 从
  • iPhone设备上的相册路径是什么?

    我试图将 PNG 文件保存到 iPhone 设备上的相册文件夹中 扩展名为 png 以便保持透明度 我的问题是 UIImageWriteToSavedPhotosAlbum 函数使用的相册路径是什么 我正在使用数据写入文件方法 Thanks
  • 如何将我的应用程序添加到 Android“共享照片”选项? [复制]

    这个问题在这里已经有答案了 可能的重复 Android 通过对话框共享 例如 当您点击分享照片时 它会为您提供一个可通过 Instagram 消息 Gmail 等 分享的选项列表 我希望我的应用程序在安装到设备后出现在这些 共享 选项下 我
  • 如何获取特定尺寸的相册照片

    我可以很好地检索相册的照片列表 是的 返回的照片数组中有不同的大小 但我的问题是 有什么方法可以指定要返回的图像的尺寸 从 photos 调用返回的数组 id gt COVER PHOTO ID from gt Array name gt
  • 如何使用 Photos API 在 iOS 8.0 中检索照片扩展名 (jpg/png)?

    我正在尝试使用 iOS 8 中新的 Photos API 获取照片的文件扩展名 但到目前为止还没有找到方法 在 iOS 8 0 之前 我会使用 ALAssetRepresentation 来获取文件扩展名 例如 Get asset repr
  • 如何使用 .NET 检索数码相机拍摄的照片的属性?

    最好在 VB Net 中 但 C 也可以 我如何访问数码相机添加到文件中的额外属性 例如Date Picture Taken Shutter Speed or Camera Model 我维护一个库 为从各种文件格式中提取图像元数据提供全面
  • Android 无法从照片应用程序获取云图像的路径

    我尝试获取绝对路径并且也获得了成功 但是当我尝试使用云图像来获取该图像并在应用程序文件中使用时 找不到并获取空值 我正在实现从另一个应用程序接收文件 例如当您从照片 图库或文件应用程序中选择图像并使用我的应用程序共享图像时 这里我得到了Ur
  • 将照片保存到 iOS 8 中的自定义相册

    我在这里需要一点帮助 我有一个方法可以将 UIImage 保存到相机胶卷中 在 iOS 8 中没有问题 该方法如下 PHPhotoLibrary sharedPhotoLibrary performChanges PHAssetChange
  • android:如何将图像添加到相册

    任何人都可以分享代码 或向我指出 Android 示例代码 来帮助我将图像添加到媒体商店 图库 中的相册中 在我的应用程序中 我从服务器下载图像 并使用相机 通过 Intent 拍摄新图像 我想将这些图像组织在特定于应用程序的相册中 类似于

随机推荐

  • 求逆矩阵的方法

    一般求逆矩阵的方法有两种 xff0c 伴随阵法和初等变换法 但是这两种方法都不太适合编程 伴随阵法的计算量大 xff0c 初等变换法又难以编程实现 适合编程的求逆矩阵的方法如下 xff1a 1 对可逆矩阵A进行QR分解 xff1a A 61
  • 柯西列

    柯西列 xff1a 无穷数列 xff0c x1 x2 xn xn 43 1 当n为无穷大时 xff0c xn与xn 43 1的距离无穷小
  • Dynamic Feature Learning for Partial Face Recognition (CVPR 2018)

    破题 xff1a 本文提出的模型是Dynamic Feature Learning xff08 DFL xff09 本人要做的事情是Partial Face Recognition xff08 PFR xff09 摘要 xff1a DFL由
  • 安装Docker Desktop报错WSL 2 installation is incomplete的问题(解决报错)

    我们安装Docker Desktop的时候 他会问我们是否需要使用WSL2 基于Windows的Linux子系统 如果我们不适用 就会使用Hyper v虚拟机运行 不过相比于虚拟机 子系统在性能方面更加出色 在我们选择使用WSL2之后 并且
  • vs2013报错:error MSB8020: The build tools for v141 (Platform Toolset = ‘v141‘) cannot be found.

    vs2013报错 xff1a error MSB8020 The build tools for v141 Platform Toolset 61 v141 cannot be found T 原因 xff1a 该项目使用vs2017创建
  • Debian系统更新apt源

    docker search了一个tomcat的镜像 xff0c 发现是Debian系统 xff0c 里面啥啥命令都没有 xff0c 使用的这个难受啊 xff0c 于是 xff0c 强迫症犯了 xff0c 要安装相应软件 xff0c 在容器里
  • Isaac Gym(一)在Ubuntu20.04.1中安装Isaac Gym

    在Ubuntu20 04 1中安装Isaac Gym 前提1 安装 Conda1 1 下载Anaconda3安装文件1 2 运行1 3 设置路径 2 安装 Isaac Gym2 1 下载Isaac Gym安装文件2 2 解压并删除安装包2
  • 在rviz中出现For frame [laser]: Fixed Frame [laser_link] does not exist

    参考 xff1a 链接 一 激光雷达在rviz中没有显示扫描数据 二 解决方法 topic报frame transform之类错误 xff0c 就有两个办法 xff1a 1 把global fixed frame设成topic自己所在的坐标
  • ubuntu安装nerd font字体

    步骤 1 下载nerd font字体文件到某个文件夹 在网址https www nerdfonts com font downloads xff0c 找到JetBrainsMono xff0c DroidSansMono xff0c Dej
  • OpenStack计费项目CloudKitty的强化及运用

    本文转自Openstack中国社区Openstack计费项目CloudKitty的强化及运用 本文作者 xff1a Li Xiangjun 在OpenStack开发社区向 Big Tent 模式全面转型之际 xff0c 一个新的项目 Clo
  • Winpcap数据包的抓取及还原

    winpcap技术手册 xff0c 除了安装文件里doc文件下有个帮助 xff0c 这里在给一个 xff1a http www ferrisxu com WinPcap html index html 这里我们用pcap next ex 函
  • 柱面坐标变换

    在图像拍摄点固定的情况下 xff0c 对图像做柱面投影变换 xff0c 再进行配准会得到较为理想的效果 如图所示 xff0c 点P在相机所处的坐标系下的坐标为 xff0c 在像素坐标系下表示为P xff08 x xff0c y xff09
  • 几行Python代码教你zip打包

    码农一方面是码代码 xff0c 另一方面是布署服务 xff0c 传到服务器时 xff0c 文件数据较多时 xff0c 直接通过文件传输概率性会丢失文件 xff0c 最好是先压成zip包 xff0c 再传输 但是 xff0c zip包中的文件
  • 推荐一款强大的OCR工具

    大家好 xff0c 我是 jonssonyan xff0c 今天我想向大家介绍一款强大的 OCR 工具 Umi OCR 以下是它的开源地址 Umi OCR GitHub xff1a https github com hiroi sora U
  • ArXiv简介以及论文提交

    arXiv网站简介 arXiv是一个收集物理学 数学 计算机科学 生物学与数理经济学的论文预印本的网站 其中arXiv发音同 archive xff0c 因为 X 代表希腊字母 xff0c 国际音标为 kai 它于1991年8月14日成立
  • Vue中axios请求报错

    问题 xff1a axios请求成功但是还是进入catch 在请求后端接口后 xff0c 发现请求成功了 xff0c 但是却报错了 在经过排查之后 xff0c 发现后端返回的数据结构更改了 xff0c 所以导致成功的代码块内部出现错误 xf
  • lsnrctl command not found

    在linux安装完oracle时 当你遇到lsnrctl command not found等问题都不能用时 会有几种情况 1 首先你先查看下环境变量里面有没有加入oracle的配置 执行 echo ORACLE HOME 没有的话 你执行
  • CNC加工中心程序代码大全,你还不收藏吗?

    数控程序中字母的含义 O xff1a 程序号 xff0c 设定程序号 N xff1a 程序段号 xff0c 设定程序顺序号 G xff1a 准备功能 X Y Z xff1a 尺寸字符 xff0c 轴移动指令 A B C U V W xff1
  • 413 Request Entity Too Large(请求实体太大)

    最近开发时遇到了上传失败的情况 xff0c 提示 xff1a 413 Request Entity Too Large xff08 请求实体太大 xff09 因为上传通过代理服务器Nginx xff0c 因此可以 修改代理服务器Nginx
  • Photos(PHFetchResultChangeDetails)

    Photos PHChange Photos PHObjectChangeDetails Photos PHFetchResultChangeDetails PHFetchResultChangeDetails主要用于记录PHFetchRe