2016-07-20 2 views
2

Когда UICollectionView завершил интерактивный переход, он прокручивается до неожиданного смещения. Установка contentOffset в блоке завершения для перехода помогает, но я вижу такой же недопустимый contentOffset в секунду секунды. Не важно использовать стандартный UICollectionViewFlowLayout или настраиваемый макет. Есть ли способ придерживаться ячейки для следующего макета? Мой пример кодаUICollectionViewTransitionLayout и contentOffset on finish

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") 

UPDATE: Добавление этого кода при запуске помог мне, но мне нужно, чтобы выполнить переход без дополнительной прокрутки до перехода

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

«анимированный» флаг должен быть ложным

ответ

1

Я нашел ответ! Он должен переопределить targetContentOffsetForProposedContentOffset (предлагаемыйContentOffset: CGPoint) в макете назначения!

Смежные вопросы