Ho una vista di raccolta, e vado per l'effetto in cui quando viene toccata una cella, cresce fino a occupare l'intero schermo. Per riuscirci, in pratica sto chiamando lo performBatchUpdates
all'interno di didSelectItemAtIndexPath
e lo sizeForItemAtIndexPath
sa di restituire una dimensione maggiore per una cella selezionata. Tutto funziona abbastanza bene, la cellula cresce e si restringe a piacere.Come si anima la vista interna di una cella della vista di raccolta mentre si cambiano le dimensioni?
Il problema è all'interno della cella. La cella della vista dell'insieme è costituita da una gerarchia di vista moderatamente complessa gestita da vincoli. Voglio che le viste secondarie della cella crescano e si riducano con la cella di animazione. Sfortunatamente, le mie sottoview si avvicinano immediatamente alla loro nuova posizione man mano che la cella si anima lentamente alla sua nuova dimensione. Come posso garantire che il contenuto della cella si anima con le dimensioni della cella?
Qui ci sono i due metodi rilevanti dal controller della vista collezione:
- (CGSize) collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
if ([collectionView.indexPathsForSelectedItems containsObject:indexPath])
return CGSizeMake(collectionView.bounds.size.width - 20, collectionView.bounds.size.height - (20 + [self.topLayoutGuide length]));
else
return CGSizeMake(260, 100);
}
- (void) collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
[collectionView performBatchUpdates:nil completion:nil];
}
Le sottoview si bloccano molto probabilmente perché un flag che indica che la cella è stata espansa passa da false a true, quindi viene chiamato 'layoutSubviews', che sposta immediatamente le visualizzazioni secondarie nelle posizioni espanse. Sto solo indovinando, se aggiungerai il codice potremo vedere se è così. In un'altra nota - la cella dovrebbe espandersi sopra le altre celle nella raccolta, o dovrebbe spingerle via? Se dovesse espandersi sopra, consiglio di aggiungere una nuova vista sopra UICollectionView e di animarla. – Ian
Ho aggiunto i due metodi rilevanti che eseguono il ridimensionamento alla selezione. C'è molto poco altro codice nel controller della vista. La cella stessa è un paio di file di pennini, nulla che io possa facilmente aggiungere al post. – Mike