UICollectionView 动画(插入/删除项目)

2024-03-17

我想在插入和/或删除 UICollectionViewCell 时自定义动画样式。

我需要这个的原因是,默认情况下,我看到插入单元格的动画具有平滑的淡入淡出效果,但是删除单元格具有向左移动+淡出动画的组合。如果不是因为一个问题,我会对此感到非常高兴。

删除单元格后,当我添加新单元格时,它仍然会被重复使用,并且当它被重复使用时,它的添加不会使用默认的淡入效果,而是左移+淡入的组合。

我不确定为什么动画中会出现这种不一致的情况。如果这是一个已知的错误/问题/愚蠢(在我这边:))请让我知道如何修复它。

否则,请让我知道如何在删除单元格时设置自定义动画(或向我指出教程)。

Thanks

UPDATE

通过子类化 UICollectionViewFlowLayout 并添加这行代码修复了奇怪的动画行为

- (UICollectionViewLayoutAttributes *) initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)itemIndexPath {

      return nil;
}

就是这样! :)


如果您使用自己的子类UICollectionViewLayout,您可以实现以下方法:

  • initialLayoutAttributesForAppearingItemAtIndexPath:用于插入

  • finalLayoutAttributesForDisappearingItemAtIndexPath:用于删除

根据文档,您返回的属性用作动画的起点,终点是布局返回的普通属性(或删除时相反)。布局属性包括位置、alpha、变换…… 当然,编写自己的布局类比使用Apple提供的流布局需要更多的工作。

编辑:为了回答您在评论中的问题,这里是大小相同的项目行布局的超级基本实现。

一个细胞有一个frame并且,默认情况下,alpha1.0(定义为layoutAttributesForItemAtIndexPath:)。当它被删除时,它的属性将从删除前的当前状态动画到由finalLayoutAttributesForDisappearingItemAtIndexPath:,对应相同的frame and an alpha0.0。所以它不会移动,但会淡出。然而,右侧的单元格将被移动到左侧(因为它们的indexPath已经改变,因此他们的frame由设置layoutAttributesForItemAtIndexPath:).

- (CGSize)collectionViewContentSize
{
    NSInteger numberOfItems = [self.collectionView numberOfItemsInSection:0];
    return CGSizeMake(numberOfItems * ITEM_WIDTH, ITEM_HEIGHT);
}

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSUInteger index = [indexPath indexAtPosition:0];
    UICollectionViewLayoutAttributes *attributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];
    attributes.frame = CGRectMake(index * ITEM_WIDTH, 0, ITEM_WIDTH, ITEM_HEIGHT);
    return attributes;
}

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
    NSMutableArray *attributes = [NSMutableArray new];
    NSUInteger firstIndex = floorf(CGRectGetMinX(rect) / ITEM_WIDTH);
    NSUInteger lastIndex = ceilf(CGRectGetMaxX(rect) / ITEM_WIDTH);
    for (NSUInteger index = firstIndex; index <= lastIndex; index++) {
        NSIndexPath *indexPath = [[NSIndexPath alloc] initWithIndexes:(NSUInteger [2]){ 0, index } length:2];
        [attributes addObject:[self layoutAttributesForItemAtIndexPath:indexPath]];
    }
    return attributes;
}

- (UICollectionViewLayoutAttributes *)finalLayoutAttributesForDisappearingItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewLayoutAttributes *attributes = [self layoutAttributesForItemAtIndexPath:indexPath];
    attributes.alpha = 0.0;
    return attributes;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UICollectionView 动画(插入/删除项目) 的相关文章

  • 如何读取 Xcode 6.1 Instruments .trace 文件?

    我一直在尝试阅读 trace文件 我使用生成的custom仪器模板 仪器 自动机 分配 Leaks using 仪器 https developer apple com library mac documentation Developer
  • 如何使用存储在 Cocoa Touch 框架中的 Localized.strings?

    我想为 CocoaTouch 框架添加多语言支持 问题 可本地化的字符串我创建的文件仅被使用NSLocalizedString当它是主应用程序及其目标的一部分时 我想将其存储在框架内以将事物分开 我怎样才能使用可本地化的字符串当放置在 Co
  • React Native ios运行问题

    我是反应本机和运行新手yarn ios我的 React Native 项目不断失败并出现以下错误 构建失败 以下构建命令失败 编译C Users gift Library Developer Xcode DerivedData gainer
  • 如何在 iOS 中设置视图的最大宽度?

    我的应用程序有一个基本的登录屏幕 一个外框以及其中的一些文本字段和按钮 我将框设置为填满屏幕 然而 在某些设备上这个盒子会太大 如何设置视图的最大宽度和高度 您可以使用自动布局约束 使框适应屏幕尺寸 但不超过给定的宽度和高度 为此 请对宽度
  • 返回一个dispatch_async获取的变量[重复]

    这个问题在这里已经有答案了 基本上 一个方法需要返回一个在dispatch async中获取的NSDictionary 这是我尝试过的 NSDictionary fetchNSDictionary dispatch queue t Queu
  • Xcode 11 无法识别静态库的架构:MacCatalyst(又名 UIKitForMac)

    在对 2019 年 WWDC 公告感到兴奋之后 我尝试使用 Xcode 11 0 beta 针对 MacOS 编译现有的 iOS 应用程序 不幸的是 事情并没有按预期进行 Xcode 说我的静态库是为 架构构建的 为 Mac 版 UIKit
  • Cordova Phonegap“导出失败”错误代码 70 构建 ios 时

    我目前正在使用 Cordova Phonegap 构建 iOS 应用程序 本来工作正常 但现在运行时出现错误cordova build ios在终端中 我收到以下错误 导出失败 错误 命令的错误代码 70 带有参数的 xcodebuild
  • 如何将数据从一个视图传递到下一个视图?

    我正在制作一个下载排队系统来下载视频 处理下载的排队代码位于另一个视图控制器中 现在我的问题是如何将下载的 URL 传递到另一个视图而不推送到另一个视图控制器 如下所示 ViewConntroller View ViewConntrolle
  • 如何避免 NSNumberFormatter 中的四舍五入

    我试图拥有一个最大精度为 2 位小数的数字字符串 而其余小数只是被修剪掉而不是四舍五入 例如 I have 123456 9964 I want 123456 99 gt Just want to trim rest of the deci
  • iOS JPEG 图像旋转 90 度

    我正在使用选择器视图从相册中选择图像 我使用上面的代码 void imagePickerController UIImagePickerController picker didFinishPickingMediaWithInfo NSDi
  • Objective-C 使用字符串池吗?

    我知道Java https stackoverflow com questions 3801343 what is string pool in java and C http msdn microsoft com en us librar
  • Swift - 将图像插入 PDF 不再适用于 iOS 13

    目前正在开发在我的贷款计算器应用程序上导出 PDF 的功能 我有一个预览屏幕 可以在您保存 PDF 之前显示它 预览屏幕由带有 html 的 webView 组成 其中包含占位符 我能够成功地将图像插入到正确的占位符上 并将其显示在 PDF
  • 比较 Objective C 中的 NSNumber

    我是 Objective C 的初学者 对这种情况有点困惑 我有以下代码 if number1 lt number2 NSLog THE FOLLOWING NUMBER NSLog number1 NSLog IS LESS THAN N
  • 禁用 iPhone 4S / 新 iPad 键盘上的听写按钮

    我们的应用程序是一个医疗保健应用程序 我们的应用程序中有一个符合 HIPAA 标准的语音识别器 所有听写都可以通过它进行 医院不希望医生意外开始与不符合 HIPAA 标准的 Nuance Dragon 服务器进行对话 因此 我正在寻找可以抑
  • 延迟图像下载完成后更新 UITableViewCell

    异步下载单元格图像后 我在更新 UITableViewCells 时遇到一些问题 我正在使用自定义 UITableViewCells 如下所示 UITableViewCell tableView UITableView tableView
  • Apple 如何在机场菜单打开时更新它? (当 NSMenu 已经打开时如何更改它)

    我有一个状态栏项目 可以弹出一个 NSMenu 并且我有一个委托集 并且它已正确连接 void menuNeedsUpdate NSMenu menu工作正常 也就是说 该方法设置为在显示菜单之前调用 我需要监听该方法并触发异步请求 稍后在
  • 在iOS中设置框架的原点

    我正在尝试以编程方式设置框架的原点 Method1 button frame origin y 100 方法二 CGRect frame button frame frame origin y 100 我尝试了方法 1 但它不起作用 显示错
  • 防止点击 MKAnnotation 时检测到 MKMapView 上的触摸事件

    我有一个 UITapGestureRecognizer 当用户点击地图时 它将在我的 MKMap 上隐藏和显示工具栏 简单 但是 当用户点击 MKMapAnnotation 时 我不希望地图以正常方式响应点击 如上所述 此外 当用户点击地图
  • iPhone 应用程序中的文本在 ipad 中的 2x 模式下出现别名

    我有一个适用于 iPhone 的应用程序 使用高分辨率图像使其适用于 iPhone 和 iPad 但在 iPad 中 所有文本在 2x 模式下都会出现别名 是否可以让App在2x模式下自动改变字体大小 或者我必须手动检测设备类型并处理字体大
  • iOS 7 导航栏颜色在 iPhone 4 上无法正确显示

    我的导航栏颜色在 iOS 7 中正常显示 部署iOS 6 0 但如果系统版本是iOS 7 0或更高版本 部分导航栏颜色在iPhone 4上无法正常显示 在iPhone 5上工作正常 我是这样做的 if SYSTEM VERSION GREA

随机推荐

  • 访问 Kubernetes clusterIP 服务请求超时

    我正在寻求帮助来解决这个无法正常工作的基本场景 安装了三个节点kubeadm on VirtualBox 虚拟机在 MacBook 上运行 sudo kubectl get nodes NAME STATUS ROLES AGE VERSI
  • 地理编码器 grpc 失败

    上个月 地理编码器每次都开始失败 出现 grpc failed 错误 我似乎无法解决它 我看过java io IOException grpc 失败 https stackoverflow com questions 45012289 ja
  • 是否可以在设置应用程序中动态更改 iPhone 应用程序的设置页面?

    对于我正在开发的 iPhone 应用程序 我希望能够动态添加或删除应用程序设置区域的部分 理想情况下 我希望能够更改多值说明符中的选项列表 并添加可深入到一个设置页面的副本的新行 我没有在苹果文档中看到任何关于此的内容 但是编译后是否可以更
  • CSS3 - 添加类来触发动画并在完成时删除类

    我有一个 div 当我单击它时 jquery 会添加一个启动动画运行的类 当动画停止时 3 秒后 我希望删除该类 以便再次单击 div 时动画将重新开始 这只是测试 目前仅限 Chrome 浏览器 这是我的 CSS3 spin360 web
  • DataGrid 是 UWP 的替代品吗?

    我正在开发一个 UWP 应用程序 该应用程序应该在 PC 和平板电脑上使用 并在稍后的手机上使用精简版 在 PC 上 我想在两列中提供数据 在移动设备上 我打算隐藏其中一列 或者我将创建一个不同的页面 具体取决于用户的操作 我需要的功能是
  • 如何在打字稿中执行 document.getElementById().value 之类的操作?

    我有一些代码 其中包含一个反应表单 其中包含类似以下内容
  • mysql 5.7在中型sql中比mysql 5.6慢很多

    我们正在升级到 mysql 5 7 只是发现它比 5 6 版本慢得多 虽然两者具有几乎相同的配置 但 5 6 版本以毫秒为单位执行大部分 sql 而另一个版本则需要大约 1 秒或更长的时间来执行中等复杂的 sql 例如下面的 SQL Get
  • flask_sqlalchemy create_all 无需导入模型

    我想了解如何设置一个独立的脚本来调用create all无需将我的所有模型导入其中 以下是相关文件 db py from flask sqlalchemy import SQLAlchemy db SQLAlchemy test model
  • 获取 mysqldump 转储适合 psql 输入的数据(转义单引号)

    我正在尝试将数据库从 MySQL 移植到 PostgreSQL 我已经在 Postgres 中重建了架构 所以我需要做的就是获取数据 而不需要重新创建表 我可以使用迭代所有记录并一次插入一条记录的代码来完成此操作 但我尝试了这一点 但对于我
  • 默认使用哪个 Google 地图 API 版本?

    如果您不指定版本号 则使用哪个版本的 Google Maps API 也许是最新的发行版本 这有关版本控制的文档 https developers google com maps documentation javascript basic
  • Python - 释放/替换字符串变量,如何处理?

    假设我将密码以纯文本形式存储在名为的变量中passWd作为字符串 一旦我放弃这个变量 python如何释放它 例如 使用del passWd or passWd new random data 字符串是否存储为字节数组 这意味着它可以在最初
  • 类库和命名空间有什么区别?

    类库和命名空间之间的实际区别是什么 我知道两者都用于将类 命名空间等分组在一起 任何人都可以告诉我在哪种情况下应该使用类库以及何时创建新的命名空间 命名空间为类提供了概念上的分离 类库提供了物理上的分离 在 Windows 中认为是独立的
  • 导入错误:没有名为 model_selection 的模块

    我正在尝试使用train test split函数并写 from sklearn model selection import train test split 这导致 ImportError No module named model s
  • 在facet_wrap中绘制平均线

    我有以下数据集 structure list Geschaeft c 0 0961028525512254 0 0753516756309475 0 0 0722803347280335 0 0 000877706260971328 Gas
  • Pandaboard 交叉编译 Qt

    我花了几周的时间尝试为我的 Panda 板交叉编译 Qt 但没办法 我无法通过 configure 如果有人能给我帮助 我将不胜感激 我的主机系统是Ubuntu 13 04 86 64位 在Virtualbox中运行 我的目标系统是 Pan
  • Python 中的舍入是如何工作的?

    我对 Python 中舍入的工作原理有点困惑 有人能解释一下为什么Python会这样吗 Example gt gt gt round 0 05 1 this makes sense 0 1 gt gt gt round 0 15 1 thi
  • 转换文件:Android 中的 Uri 到文件

    转换的最简单方法是什么android net Uri https developer android com reference android net Uri持有一个对象file 键入一个java io File https develo
  • “在源 Y 中找不到事件 ID X 的描述。”

    我正在尝试将自定义事件从我的 Web 应用程序写入 Windows 事件日志 我没有运气让消息字符串正常工作 我不断收到 无法找到源 Y 中事件 ID X 的描述 为了缩小范围 我决定将一个事件写入我的机器上已存在的源 我只是查看了已经写出
  • Nginx 配置中静态位置的多个位置

    我的应用程序将在两个位置提供静态文件 一个是 my path project static 另一个是 my path project jsutils static 我很难让网络服务器在两个目录中查找静态内容 这是我的应用程序的 nginx
  • UICollectionView 动画(插入/删除项目)

    我想在插入和 或删除 UICollectionViewCell 时自定义动画样式 我需要这个的原因是 默认情况下 我看到插入单元格的动画具有平滑的淡入淡出效果 但是删除单元格具有向左移动 淡出动画的组合 如果不是因为一个问题 我会对此感到非