2012-09-29 55 views
12

Tengo una subclase de UICollectionViewLayout que coloca las celdas en un círculo. El diseño devuelve YES para la llamada shouldInvalidateLayoutForBoundsChange:. En rotación, la celda en la posición inicial se desvanece y la célula en el posición final se desvanece en.¿Cuál es la mejor forma de deshabilitar los desvanecimientos cruzados en UICollectionView/UICollectionViewLayout gira o limita los cambios?

Al añadir el siguiente código a mi disposición puedo desactivado se desvanece y el círculo de artículos que parece a simple girar con el cambio de orientación:

- (UICollectionViewLayoutAttributes *)initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)itemIndexPath { 
    return nil; 
} 

- (UICollectionViewLayoutAttributes *)finalLayoutAttributesForDisappearingItemAtIndexPath:(NSIndexPath *)itemIndexPath { 
    return [self layoutAttributesForItemAtIndexPath:itemIndexPath]; 
} 

¿por qué los métodos llaman a ellas un cambio de límites porque la documentación no lo hace parecen sugerir que hacen? La documentación parece indicar que reciben el llamado relacionado con la inserción y eliminación de elementos de la vista de colección.

¿Existe alguna forma mejor de desactivar el fundido cruzado durante la rotación?

Notas:

  • initialLayoutAttributesForAppearingItemAtIndexPath: La documentación estados que por defecto el método devuelve nil pero llama a super regresaron valores no nulos.
  • puse puntos rompe simbólicos sobre los métodos UICollectionView deleteItemsAtIndexPaths:, moveItemAtIndexPath:toIndexPath: y insertItemsAtIndexPaths: y ninguno de ellos se ven afectados durante la rotación.
+0

Esto es solo una toma en la oscuridad, pero para deshabilitar la animación de rotación, puede cerrar completamente la animación del núcleo para la operación de rotación: [CATransaction begin]; [CATransaction setValue: (id) kCFBooleanFalse forKey: kCATransactionDisableActions]; // realiza tu rotación [Compromiso de transacción CATransaction]; – maz

+0

Tal vez, internamente en un cambio de límites, los elementos se eliminen y se agreguen, y como resultado, se llama a los métodos. En cuanto a por qué -deleteItemsAtIndexPaths: y -insertItemsAtIndexPaths: no se llaman ... no hay pista aquí. Tal vez el programador UIKit hizo trampa y evitó la API para realizar la inserción y eliminar? No sin precedentes. – maz

+1

¿Podría deshabilitar las animaciones implícitas en la capa de respaldo de la vista usando algo como lo describo aquí: http://stackoverflow.com/questions/2244147/disabling-implicit-animations-in-calayer-setneedsdisplayinrect/2244734#2244734? –

Respuesta

10

Los estados de archivo UICollectionViewLayout.h

// This set of methods is called when the collection view undergoes an 
    animated transition such as a batch update block or an animated 
    bounds change. 
// For each element on screen before the invalidation, 
    finalLayoutAttributesForDisappearingXXX will be called and an 
    animation setup from what is on screen to those final attributes. 
// For each element on screen after the invalidation, 
    initialLayoutAttributesForAppearingXXX will be called an an 
    animation setup from those initial attributes to what ends up on 
    screen. 

que dice claramente que están llamados grada cambios. En lugar de eliminar/insertar, "estado antiguo" y "estado nuevo" parecen ser más precisos.

Cuestiones relacionadas