UICollectionView更改布局选定的项目和框架/约束

时间:2016-08-24 05:56:42

标签: ios swift uicollectionview uicollectionviewlayout

我有一个集合视图,我可以在看起来像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

以下是转换目前的情况:

transition starting at 0 at full speed

在大多数情况下,它看起来不错。但是,如果我们开始点击非零的元素,则会发生这种情况:

transition starting at 4 at full speed

我无法弄清楚它为何经历过渡,然后快速回到显示0元素。

这是在打开SIM卡中的慢速转换后的样子:

transition starting at 4 at slow speed

我尝试在集合视图中设置所选元素,如下所示:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    NSLog("index Path chosen: \(indexPath)")
    self.swipeLayout.startingItemIndex = indexPath.item
    changeLayoutTapped(self)
}

但那里没有运气。

有什么想法吗?

额外的奖励,如果有人可以告诉我如何获取内容(内部数字)在整个过渡期间保持在视图中间居中。

感谢。

0 个答案:

没有答案