Каков наилучший способ отключить перекрестные затухания в UICollectionView/UICollectionViewLayout, который вращает или меняет изменения?
У меня есть подкласс UICollectionViewLayout
, который помещает ячейки в круг.
layout возвращает YES
для вызова shouldInvalidateLayoutForBoundsChange:
. На
вращение, ячейка в исходном положении исчезает, а ячейка в финале
положение исчезает.
Добавив в мой макет следующий код, я могу отключить затухания и
Кажется, что круг элементов просто вращается с изменением ориентации:
- (UICollectionViewLayoutAttributes *)initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)itemIndexPath {
return nil;
}
- (UICollectionViewLayoutAttributes *)finalLayoutAttributesForDisappearingItemAtIndexPath:(NSIndexPath *)itemIndexPath {
return [self layoutAttributesForItemAtIndexPath:itemIndexPath];
}
Почему методы вызываются при изменении границ, потому что документация не
кажется, предлагают, что они делают? Документация, похоже, утверждает, что они называются связанными
для вставки и удаления элементов из представления коллекции.
Есть ли лучший способ отключить перекрестное замирание во время вращения?
Примечания:
- Документация
initialLayoutAttributesForAppearingItemAtIndexPath:
заявляет, что по умолчанию метод возвращает nil
, но вызывает возврат super
non-nil.
- Я установил символические точки разрыва в методах UICollectionView
deleteItemsAtIndexPaths:
, moveItemAtIndexPath:toIndexPath:
и
insertItemsAtIndexPaths:
, и ни один из них не попадает во время вращения.
Ответы
Ответ 1
Состояние UICollectionViewLayout.h
состояния
// This set of methods is called when the collection view undergoes an
animated transition such as a batch update block or an animated
bounds change.
// For each element on screen before the invalidation,
finalLayoutAttributesForDisappearingXXX will be called and an
animation setup from what is on screen to those final attributes.
// For each element on screen after the invalidation,
initialLayoutAttributesForAppearingXXX will be called an an
animation setup from those initial attributes to what ends up on
screen.
в котором четко сказано, что они вызываются при изменении границ. Вместо удаления/вставки "старое состояние" и "новое состояние" кажутся более точными.