我有一个集合视图,我可以在看起来像UITableView的布局和看起来像TimeMachine的布局之间动态切换,就像我正在调用的## carousel&#34 ; SwipeLayout" (现在不会刷,但最终会刷)。
BTW,整个项目都在这里:https://github.com/SuperTango/CollectionViewLayoutSwitching。在带有标记" initial_question"
的主分支下初始布局是表格布局,当点击一个项目时,我将布局更改为" SwipeLayout"用动画(再回来)。在我的ViewController中,我有:
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
NSLog("index Path chosen: \(indexPath)")
changeLayoutTapped(self)
}
@IBAction func changeLayoutTapped(sender: AnyObject) {
if (self.collectionView.collectionViewLayout == tableLayout) {
self.collectionView.setCollectionViewLayout(swipeLayout, animated: true)
self.mode = Mode.Swipe
} else {
self.collectionView.setCollectionViewLayout(tableLayout, animated: true)
self.mode = Mode.Table
}
}
SwipeLayout的代码有点长,所以我不想把它放在这个问题中,但是这里有一个链接:https://github.com/SuperTango/CollectionViewLayoutSwitching/blob/initial_question/CollectionViewLayouts/SwipeLayout.swift
以下是转换目前的情况:
在大多数情况下,它看起来不错。但是,如果我们开始点击非零的元素,则会发生这种情况:
我无法弄清楚它为何经历过渡,然后快速回到显示0元素。
这是在打开SIM卡中的慢速转换后的样子:
我尝试在集合视图中设置所选元素,如下所示:
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
NSLog("index Path chosen: \(indexPath)")
self.swipeLayout.startingItemIndex = indexPath.item
changeLayoutTapped(self)
}
但那里没有运气。
有什么想法吗?
额外的奖励,如果有人可以告诉我如何获取内容(内部数字)在整个过渡期间保持在视图中间居中。
感谢。