У меня есть представление (LSTabBarView), которое поддерживает вставку / удаление новых элементов следующими методами:
- (void)insertItem:(LSTabItem *)item atIndex:(NSUInteger)index animated:(BOOL)animated;
- (void)removeItemAtIndex:(NSUInteger)index animated:(BOOL)animated;
LSTabItem - это объект, представляющий класс моей модели. Каждый раз, когда новый элемент добавляется с помощью insertItem: atIndex: animated: создается новое подпредставление (LSTabControl) с использованием информации внутри этого объекта модели, затем добавляется в главное представление, и, наконец, вызывается layoutSubviews для пересчета кадра каждого элемента. подвиды.
Я только что реализовал эти операции, но параметр "animated" на данный момент не используется, и Мне было интересно, куда мне поместить код для обработки анимации, когда animated - YES.
Это соответствующие методы:
- (void)insertItem:(LSTabItem *)item
atIndex:(NSUInteger)index
animated:(BOOL)animated
{
...
LSTabControl *tab = [self _configureNewTabControlForItem:item atIndex:index];
[tabItems insertObject:item atIndex:index];
[tabViews insertObject:tab atIndex:index]; // array which contains all the subviews
[self setNeedsLayout];
}
- (void)removeItemAtIndex:(NSUInteger)index
animated:(BOOL)animated
{
...
LSTabControl *tab = [tabViews objectAtIndex:index];
...
[tab removeFromSuperview];
[tabViews removeObjectAtIndex:index];
[tabItems removeObjectAtIndex:index];
[self setNeedsLayout];
}
Что делает layoutSubviews, так это, по сути, помещает все подпредставления в линейную горизонтальную последовательность один за другим, применяя заполнение между каждым подпредставлением. Каждое подпредставление может иметь различную ширину или высоту (они не имеют фиксированный размер).
Когда добавляется новый элемент с анимацией, установленной на YES (скажем, при index = 2), я хочу, чтобы каждое подпредставление от index + 1 до numberOfElements было смещено вправо, а затем новое подпредставление появилось в доступном отверстии.
Очевидно, я хочу, чтобы LSTabBarView был расширяемым, поэтому в моей базовой реализации этих методов я не могу делать предположения о том, как подпредставления будут упорядочены по подклассам (например, подкласс может переопределять layoutSubviews и принимать решение о размещении элементов в вертикальной компоновке вместо горизонтального и, как следствие, решает сместить каждое подпредставление вниз, а не вправо при добавлении новых элементов ...)
Я не хочу знать, как выполнять анимацию (я уже знаю, как это сделать), но как правильно подойти к анимации появления нового подпредставления, учитывая мои требования, описанные выше.
Должен ли я рассмотреть возможность выполнения всех анимаций внутри layoutSubviews или поместить код анимации в insertItem / removeItem, позволяя layoutSubviews просто рассчитать макет подпредставлений?
Спасибо