gpt4 book ai didi

ios - UICollectionView moveItemAtIndexPath :toIndexPath: issues moving items not on screen

转载 作者:技术小花猫 更新时间:2023-10-29 11:23:53 26 4
gpt4 key购买 nike

我正在尝试为 iOS 6 上的 UICollectionView 中的项目重新排序设置动画。

我写了这段代码:

    NSMutableDictionary *from = [NSMutableDictionary dictionaryWithCapacity:self.count];
for (int ii = 0; ii < self.count; ii++) {
MyItem item = [self getItemAtIndex:(NSInteger)ii];
[from setObject:[NSNumber numberWithInt:ii] forKey:[NSNumber numberWithInt:item.id]];
}

[self sort];

[self.collectionView performBatchUpdates:^{
for (int ii = 0; ii < self.count; ii++) {
MyItem item = [self getItemAtIndex:(NSInteger)ii];
NSNumber *prevPos = (NSNumber *)[from objectForKey:[NSNumber numberWithInt:item.id]];
if ([prevPos intValue] != ii) {
NSIndexPath *from = [NSIndexPath indexPathForItem:prevPos.intValue inSection:0];
NSIndexPath *to = [NSIndexPath indexPathForItem:ii inSection:0];
[self.collectionView moveItemAtIndexPath:from toIndexPath:to];
}
}
} completion:nil];

所以首先,我将项目的所有当前位置保存在字典中,然后我将项目排序到新位置,然后我遍历所有项目,并将它们从旧位置移动到新的。

当所有项目都显示在屏幕上时,这很有效,但如果列表超过 10,这使得某些项目当前不可见(因为它们位于列表的可见部分之上或之下),它会导致这些项目突然出现在可见索引中并动画到其他地方,当动画停止时它们被隐藏。这看起来真的很奇怪,因为有些项目出现在其他项目之上......

这是 iOS 6 UICollectionView 的问题吗,我是不是做错了什么?

最佳答案

看起来 UICollectionView 正在以一种使动画看起来很糟糕的方式重用单元格。任何离开屏幕的单元格都可以重复使用。

那么为什么你的动画看起来很时髦?

单元格的开始和结束位置,以及它是否被隐藏,都会在您四处移动单元格时自动处理。为了让这些动画看起来不错,您还需要更新数据源,因为代码似乎使用它来确定动画期间单元格的开始和结束位置。

在调用索引更新 block 之前,请确保使用新的索引位置更新了数据源。这样一来,Apple 的代码就拥有了以更美观的方式移动您的单元格所需的信息。

来自Apple documentation on UICollectionViews :

To insert, delete, or move a single section or item, you must follow these steps:

  1. Update the data in your data source object.
  2. Call the appropriate method of the collection view to insert or delete the section or item.

It is critical that you update your data source before notifying the collection view of any changes. The collection view methods assume that your data source contains the currently correct data. If it does not, the collection view might receive the wrong set of items from your data source or ask for items that are not there and crash your app.

关于ios - UICollectionView moveItemAtIndexPath :toIndexPath: issues moving items not on screen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13698275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com