Transiciones de navigation Layout-to-Layout UICollectionViewController

Estoy trabajando en múltiples UICollectionViewController s que muestran todos los mismos contenidos con diferentes layouts.

De acuerdo con la aplicación de ejemplo CollectionViewTransition de Apple y la Sesión 218 de WWDC 2013, UICollectionViewController tiene una propiedad llamada useLayoutToLayoutNavigationTransitions que básicamente maneja las transiciones de navigation al interpolar layouts de 'desde' y 'a'.

Supongamos que tengo dos UICollectionViewControllers denominados MasterCollectionViewController y DetailCollectionViewController . Cuando presiono DetailCollectionViewController desde MasterCollectionViewController , el layout se cambia correctamente, pero la vista de colección sigue utilizando la fuente de datos declarada en MasterCollectionViewController .

Este es un problema para mí, porque en cada uno de UICollectionViewController , necesito reorganizar las configuraciones de secciones / elementos. Un buen ejemplo de lo que estoy tratando de hacer es la aplicación de fotos en iOS 7. La primera pestaña de esta aplicación tiene tres controlleres de vista: años, collections y momentos. Estos controlleres de vista muestran todos los mismos contenidos: fotos. Lo que es diferente entre cada controller de vista es cómo se agrupan las fotos en la sección. Y la agrupación de secciones es responsabilidad de UICollectionViewDataSource que es un problema aquí.

Si el comportamiento de la propiedad useLayoutToLayoutNavigationTransitions que estoy experimentando es un comportamiento normal, ¿hay alguna forma de lograr mi objective en un enfoque diferente?

Cualquier ayuda o comentario sería apreciada.

¡Gracias!

Estoy viendo el mismo comportamiento y estoy de acuerdo en que no es lo ideal.

El problema fundamental aquí es que la misma instancia de UICollectionView se comparte / pasa entre los dos controlleres de vista. Experimenté con tratar de cambiar el delegado y el origen de datos de UICollectionView pero tropecé con varios problemas.

Al final, la solución que acabé adoptando fue hacer que el maestro UICollectionViewController un delegado del UINavigationController , implementando:

– navigationController:willShowViewController:animated:

… utilizando esto para cambiar una propiedad controllerMode y luego agregar sentencias de conmutador a -collectionView:cellForItemAtIndexPath: y -collectionView:didSelectItemAtIndexPath: para proporcionar el comportamiento requerido en el modo. También agregué código a -setControllerMode: para hacer cualquier cambio de estado requerido en el controller de vista maestra.

¡Espero que ayude!