Pergunta

Eu tenho um modo de exibição (LSTabBarView), que apoia a inserção/exclusão de novos elementos com os seguintes métodos:

- (void)insertItem:(LSTabItem *)item atIndex:(NSUInteger)index animated:(BOOL)animated; 
- (void)removeItemAtIndex:(NSUInteger)index animated:(BOOL)animated;

LSTabItem é o objeto que representa a minha classe do modelo.Cada vez que um novo elemento é adicionado com insertItem:atIndex:animação:uma nova visualização secundária é criado (LSTabControl) usando as informações dentro deste modelo de objecto e, em seguida, adicionado à vista principal, e, finalmente, layoutSubviews é chamado para recalcular o quadro de cada subviews.

Eu tenho apenas a implementação dessas operações, mas o "animado" parâmetro não é usado para agora e Eu queria saber onde devo colocar o código para lidar com a animação quando a animação é SIM.

Estes são os métodos relevantes:

- (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];
}

O que layoutSubviews fazer é, basicamente, colocar todos os subviews linear horizontal seqüência, um após o outro a aplicação de um preenchimento entre cada visualização secundária.Cada visualização secundária poderia ter uma outra largura ou altura (eles não são de tamanho fixo).Quando um novo elemento é adicionado com animação definida como SIM (permite dizer que, no index=2) quero que cada subviews de índice+1 para numberOfElements são deslocadas para a direita e, em seguida, a nova visualização secundária aparecem no buraco.

Eu quero, obviamente, LSTabBarView para ser extensível, então, na minha base de implementação destes métodos, não posso fazer suposições sobre como o subviews será organizado por subclasses (por exemplo, uma subclasse pode substituir layoutSubviews e decidir o layout de elementos em um layout vertical em vez de horizontal e, por consequência, decide mudar cada subviews para baixo em vez de para a direita quando a adição de novos elementos (...)

Eu não quero saber como faço para realizar a animação (que eu já sei como fazê-lo), mas o que é a abordagem correta, como animar o aparecimento de uma nova visualização secundária, tendo em conta a minha requisitos descritos acima.

Devo considerar para executar todas as animações dentro de layoutSubviews ou coloca a animação código dentro de insertItem/removeItem deixar layoutSubviews apenas para calcular o subviews layout?

Obrigado

Foi útil?

Solução

layoutSubviews destinado a ser one-shot método rápido.Melhor utilizar o seu insertItem: para a animação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top