ios - 缩放正在交互移动/重新排列的动画 UICollectionViewCell
问题描述
我有一个简单的水平集合视图,并且可以使用长按手势交互地重新排列此集合中的单元格。
我想要什么- 我想放大正在拖动/重新排列的单元格,使其看起来与众不同并且我的设计需要它。
我的代码是什么样子的- 我创建了一个自定义子类UICollectionViewFlowLayout
并覆盖了该方法layoutAttributesForInteractivelyMovingItem(at:withTargetPosition:)
,并将所需的比例值分配给UICollectionViewLayoutAttributes
. 我的实现如下所示:
class CustomFlowLayout: UICollectionViewFlowLayout {
override func layoutAttributesForInteractivelyMovingItem(at indexPath: IndexPath, withTargetPosition position: CGPoint) -> UICollectionViewLayoutAttributes {
let movingAttributes = super.layoutAttributesForInteractivelyMovingItem(at: indexPath, withTargetPosition: position)
movingAttributes.transform = CGAffineTransform(scaleX: 1.1, y: 1.1)
return movingAttributes
}
}
除了上面的代码,我还在我的布局上设置了以下属性:
layout.estimatedItemSize = CGSize(width: 60, height: 60)
layout.itemSize = CGSize(width: 60, height: 60)
layout.minimumLineSpacing = 10
layout.scrollDirection = .horizontal
会发生什么- 此实现提供了非常错误的行为,导致所有单元格以随机模式放大和缩小。预计仅交互式拖动单元格的属性/比例应通过覆盖方法更改。
预期结果- 预计只有交互式拖动单元格的属性/比例应通过覆盖方法更改。其他项目的大小和比例应保持不变。
调试期间的观察- 注释以下行(基本上,不提供具有显式值的集合视图布局estimatedItemSize
):
// layout.estimatedItemSize = CGSize(width: 60, height: 60)
这导致完美的行为。scale 属性仅适用于拖动的项目,其他单元格项目不受影响。没有错误行为;一切顺利。
问题- 当我们明确指定时,为什么原始实现会产生错误行为estimatedItemSize
?
PS - 通过反复试验和错误调试运气,我能够通过评论提到的行来产生非错误行为。没有文档提到这一点,也没有向我指出解决方案。如果这里有人知道文档是否偶然在某处提到这一点而我错过了,那就太好了。
解决方案
推荐阅读
- jenkins - 在 groovy 中列出 Jenkins 上所有及时触发的作业
- html - 重定向时页面未加载,但单击后退按钮时会显示页面一秒钟并导航到上一页
- java - 在java中将输入的double或float值转换为美国货币格式
- java - 在java中获取traceroute信息,包括时间
- azure - 您无权查看此目录或页面。天蓝色
- .net - 单个产品上 50 个实例的 Web 配置转换,没有 50 个转换文件
- python - 从 BytesIo 打开一个 DBF 文件
- reactjs - 克隆时刻 js 对象
- c# - 使用 HwndHost 取消同步刷新嵌入在 WPF 应用程序中的 Unity 窗口
- python - Talib 安装问题