私はコレクションビューを持っています。セルをタップすると画面全体を占めるようになります。これを達成するために、私は本質的にはdidSelectItemAtIndexPath
の中にperformBatchUpdates
を呼び出し、sizeForItemAtIndexPath
は選択されたセルのより大きなサイズを返すことを知っています。これはすべて正常に機能し、細胞は必要に応じて増殖し、収縮します。コレクションビューのセルの内側のビューをアニメーション化してサイズを変更するにはどうすればよいですか?
問題はセルの内部です。コレクションビューセルは、制約によって管理される適度に複雑なビュー階層で構成されます。アニメーション化されたセルで、セルのサブビューを拡大して縮小したい。残念ながら、私のサブビューは、新しいサイズにゆっくりとアニメーション化されるので、新しい位置にすぐにスナップしています。どのようにしてセルの内容がセルサイズでアニメーション化されるようにすることができますか?私は正確に同じ問題を抱えていた
- (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];
}
拡張されるセルを示すフラグが偽から真に切り替わり、 'layoutSubviews'が呼び出され、サブビューを直ちに展開された位置に移動するため、サブビューがスナップする可能性が最も高いです。私はちょうど推測している - あなたがコードを追加した場合、それが当てはまるかどうかを見ることができます。もう1つの注意点 - セルがコレクション内の他のセルの上に展開されるか、それとも途中で押し出されるべきか?上に展開する必要がある場合は、UICollectionViewの上に新しいビューを追加してアニメーション化することをお勧めします。 – Ian
選択時にサイズ変更を行う2つの関連メソッドを追加しました。 View Controllerには他のコードはほとんどありません。セル自体はいくつかのnibファイルですが、投稿に簡単に追加することはできません。 – Mike