- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我正在尝试为 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:
- Update the data in your data source object.
- 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/
C++ 中的标准“映射”容器允许您插入右值: T x; std::map m; // m[1]; // populate "1" auto it = m.insert(std::make_pair(
我们知道 std::move does not actually move anything .它只是将左值引用 (&) 转换为右值引用 (&&)。 那么在下面的例子中,拷贝构造函数是如何被调用的呢?
http://en.cppreference.com/w/cpp/language/rule_of_three 几个月前我开始使用 c++11并观看了五人规则。 所以..我开始将复制构造函数/复制赋值
这个问题在这里已经有了答案: In what scenarios should I expect to explicitly need to implement a move constructor
我有一个类似于下面的对象,我正在尝试为它实现一个 move 构造函数,这样你就可以为 std::vector 插入一个. struct Mesh { std::vector vPoint
这个问题在这里已经有了答案: How to create an std::function from a move-capturing lambda expression? (3 个回答) 关闭7年前
我有一个源文件,我正在使用它 move 到一个存档目录 关闭。 move (srcfile,dstdir) 但是当存档目标目录中已经存在相同的文件时,它会抛出一个错误,指出无法 move 文件已经存在
这应该有效,但无效并给出以下错误(如下)。 我读过几篇关于 stackoverflow 的帖子 here和 here但在这种情况下似乎没有一个好的答案。我真的希望我只是错过了一些愚蠢的东西,我已经在这
我似乎无法弄清楚为什么会这样。当我运行以下代码时: $uref = APACHE_ROOT . UPLOAD_PATH . $applicant . "_ref_{$email}_{$year}";
我似乎无法弄清楚为什么会这样。当我运行以下代码时: $uref = APACHE_ROOT . UPLOAD_PATH . $applicant . "_ref_{$email}_{$year}";
我的表格行可以上下 move ,但我的问题是数据表行取代了表格标题(第一行)。 我想要一个固定的第一行,这样当您单击向上箭头时,您就不会向上 move 该行来替换标题。 我尝试了一些条件逻辑来检查当前
正如我在Move constructor/operator=中询问的那样,过了一段时间,我同意并接受了这个问题的正确答案,我只是在想,是否有类似“移动析构函数” 这样的东西会在每次移动的对象上调用会有
如果我有一个像这样的 C 类: class C { std::string s; public: C(std::string& s) : s(s) {} C(std::str
我是 C++11 的新手,发现 move 语义和复制省略非常适合编写优雅高效的代码。不过我有一些问题想请教。这里我写了一个模板类 matrix.hpp 并用它来测试 move 语义的行为。 #incl
我在我们的项目中遇到了这样的代码: class A { public: A(A&& obj): valid_(false), data_(obj.data_) {} //... void
move 语义在这个例子中是如何工作的: struct test { int ii[10]; int i; }; test f() { test a; std::cou
假设我有一个类型为 A 的对象 a。 如果我想将其 move 到函数foo(A)。 一个选择是执行 foo(std::move(a)),这将调用 move 构造函数。 但是,假设我正在使用一个我无法控
我用 move 复制构造函数和 move 复制赋值运算符创建了一个简单的应用程序,并且在它们中的每一个上我都做了一个 cout 语句来告诉我,它们正在执行。但是在执行过程中,我没有看到 move 复制
相关问题: Why this move constructor is not called wtih rvalue temporary? [duplicate] Move Constructor vs
我正在努力研究 move 构造函数,并希望通过这个问题获得更多见解。这是一个简单的类。 class A { private: vector Bs; public: /* ..
我是一名优秀的程序员,十分优秀!