UICollectionViewTransitionLayout和contentOffset完成

阿尔辛斯

当UICollectionView完成交互式过渡时,它将滚动到意外的偏移量。在完成块中设置contentOffset以进行过渡会有所帮助,但是在瞬间我看到了相同的无效contentOffset。无论使用标准UICollectionViewFlowLayout还是自定义布局。有没有办法贴在下一个布局的单元格上?我的代码示例

let nextLayout = self.collectionView.collectionViewLayout === layout1 ? layout2 : layout1
        let transition = collectionView.startInteractiveTransitionToCollectionViewLayout(nextLayout) { (par1: Bool, par2: Bool) in
            //There was contentOffset setting code, that leads to blink
        }

        let initializer:(POPMutableAnimatableProperty!)->Void = {property in
            property.readBlock = {obj, values in
                values[0] = transition.transitionProgress
            }
            property.writeBlock = {obj, values in
                transition.transitionProgress = values[0]
                if let attrs: UICollectionViewLayoutAttributes = transition.layoutAttributesForItemAtIndexPath(indexPath) {
                    collectionView.contentOffset = CGPointMake(attrs.frame.origin.x, attrs.frame.origin.y)
                }
            }
            property.threshold = 0.01
        }

        let springAnimation = POPSpringAnimation()
        let property = POPAnimatableProperty.propertyWithName("com.pop.property", initializer: initializer) as! POPAnimatableProperty
        springAnimation.springBounciness = 8.0
        springAnimation.dynamicsMass = 8.0
        springAnimation.property = property
        springAnimation.fromValue = 0.0
        springAnimation.toValue = 1.0

        springAnimation.completionBlock = {anim, finished in
            if finished {
                transition.transitionProgress = 1.0
                self.collectionView.finishInteractiveTransition()
            }
        }
        transition.pop_addAnimation(springAnimation, forKey: "transitionProgress")

更新:在开始时添加此代码对我有帮助,但是我需要在过渡之前不进行额外滚动的情况下执行过渡

collectionView.scrollToItemAtIndexPath(indexPath, atScrollPosition: UICollectionViewScrollPosition.CenteredVertically, animated: false)

“动画”标志应该为假

阿尔辛斯

我找到答案了!它需要在目标布局中覆盖targetContentOffsetForProposedContentOffset(proposedContentOffset:CGPoint)!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

UITextView contentOffset在viewDidLoad和viewDidAppear之间更改

来自分类Dev

UIScrollView和Autolayout:ContentOffset在更改,但内容视图在移动

来自分类Dev

我可以截取UIScrollview.contentOffset的'willSet'和'didSet'吗?

来自分类Dev

完成和垃圾回收

来自分类Dev

Firebase查询和完成

来自分类Dev

SwiftUI结合使用@EnvironmentObject和Picker会导致ScrollView contentOffset绑定警告

来自分类Dev

如何使用UICollectionViewTransitionLayout插入自定义UICollectionViewLayoutAttributes属性

来自分类Dev

jQuery自动完成和烧瓶

来自分类Dev

在StreamWriter和StreamReader上完成

来自分类Dev

Firebase和完成处理程序

来自分类Dev

执行和完成方法

来自分类Dev

jQuery自动完成和烧瓶

来自分类Dev

使用 QLineEdit 和 QItemDelegate 完成

来自分类Dev

LLDB 断点命令和完成

来自分类Dev

React和setState和自动完成

来自分类Dev

WebBrowser控件文档在iframe和Javascript完成后完成

来自分类Dev

如何识别创建只读副本操作是否完成和完成

来自分类Dev

UITableView contentOffset行为异常

来自分类Dev

设置了UITextView contentOffset

来自分类Dev

UITableView contentOffset行为异常

来自分类Dev

Swift contentOffset 滚动

来自分类Dev

Javascript继承和封装,高效完成

来自分类Dev

Emacs ESS缩进和自动完成

来自分类Dev

使用Emacs和标签自动完成

来自分类Dev

IPython Notebook和Pandas自动完成

来自分类Dev

ObserveOn和SubscribeOn-完成工作的地方

来自分类Dev

SKAction如何结合Key和完成

来自分类Dev

SKAction如何结合Key和完成

来自分类Dev

jQuery UI自动完成和隐藏字段