Я пишу пользовательский UICollectionViewFlowLayout
, и я заметил, что initialLayoutAttributesForAppearingItemAtIndexPath:
и initialLayoutAttributesForAppearingDecorationElementOfKind:atIndexPath:
будут вызываться для всех разделов, когда я вызываю performBatchUpdates:completion:
в виде коллекции. В результате все секции имеют анимацию, применяемую к ним, а не только добавленную секцию.
[collectionView performBatchUpdates:^{
currentModelArrayIndex++;
[collectionView insertSections:[NSIndexSet indexSetWithIndex:currentModelArrayIndex]];
[collectionView reloadSections:[NSIndexSet indexSetWithIndex:currentModelArrayIndex-1]];
} completion:^(BOOL finished) {
[collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:currentModelArrayIndex] atScrollPosition:UICollectionViewScrollPositionTop animated:YES];
}];
То, что я пробовал до сих пор, заключается в удалении вызова performBatchUpdates:completion:
вместо простых обновлений, но уже существующие разделы (все они) анимированы в любом случае. Я придумал решение проверки, чтобы убедиться, что я изменяю атрибуты макета только в последнем разделе, но он чувствует себя взломанным.
if (decorationIndexPath.section == [(id<UICollectionViewDataSource>)self.collectionView.delegate numberOfSectionsInCollectionView:self.collectionView] - 1)
{
layoutAttributes.alpha = 0.0f;
layoutAttributes.transform3D = CATransform3DMakeTranslation(-CGRectGetWidth(layoutAttributes.frame), 0, 0);
}
Является ли это подходящим способом для анимации только некоторых разделов?