Подтвердить что ты не робот

Каков наилучший способ отключить перекрестные затухания в 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:, и ни один из них не попадает во время вращения.
4b9b3361

Ответ 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.

в котором четко сказано, что они вызываются при изменении границ. Вместо удаления/вставки "старое состояние" и "новое состояние" кажутся более точными.