Cómo interpolar propiedades UICollectionViewLayoutAttributes personalizadas con UICollectionViewTransitionLayout

Tengo dos personalizadosUICollectionViewLayout objetos que usan una costumbreUICollectionViewLayoutAttributes subclase Estos atributos personalizados agregan una sola propiedadtintAlpha que controla la opacidad de una vista de superposición de tinte adjunta a cada celda de vista de colección.

Ahora quiero hacer la transición entre estos dos diseños, usando unUICollectionViewTransitionLayout subclase ¿Cómo puedo configurar la subclase de diseño de transición para interpolar el personalizadotintAlpha propiedad en mis atributos de diseño personalizados?

Podría hacer algo como esto:

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
{
     CustomLayoutAttributes *attr = [super layoutAttributesForItemAtIndexPath:indexPath];

     CustomLayoutAttributes *fromAttr = (CustomLayoutAttributes *)[self.currentLayout layoutAttributesForItemAtIndexPath:indexPath];
     CustomLayoutAttributes *toAttr = (CustomLayoutAttributes *)[self.nextLayout layoutAttributesForItemAtIndexPath:indexPath];

     CGFloat t = self.transitionProgress;
     attr.tintAlpha = (1.0f - t) * fromAttr.tintAlpha + t * toAttr.tintAlpha;

     return attr;
}

Sin embargo, esto ignorará cualquier cambio aplicado a los atributos eninitialLayoutAttributesForAppearingItemAtIndexPath: & finalLayoutAttributesForDisappearingItemAtIndexPath: en el diseño actual o siguiente, por lo que en realidad no es correcto. Por lo que puedo decir, la implementación predeterminada deUICollectionViewTransitionLayout determina los atributos apropiados de / a y los almacena en caché, ya sea enprepareLayout olayoutAttributesForItemAtIndexPath:. Sería muy útil tener alguna API pública enUICollectionViewTransitionLayout para permitirnos acceder a estos objetos de / a atributos, como si tratara de implementar mi propia lógica sobre si usar los atributos iniciales / finales frente a los atributos estándar, seguramente habrá algunas discrepancias de la implementación predeterminada.

¿Hay una mejor manera de interpolar estos atributos personalizados durante una transición de diseño?

Actualizar:

Acabo de encontrar un problema adicional con este escenario. En el código anterior, al obtenerfromAttr & toAttr directamente de los diseños actuales / siguientes, elcollectionView esnil para el diseño actual (más allá del primer ciclo de ejecución de la transición al menos). Si el diseño depende en absoluto de los límites de la vista de colección, considere un diseño de flujo de cobertura simple, por ejemplo, entonces elfromAttr será incorrecto

Estoy realmente ansiando uninterpolatedLayoutAttributesFromLayoutAttributes:toLayoutAttributes:progress: enUICollectionViewTransitionLayout eso puede ser anulado por subclases.

Respuestas a la pregunta(1)

Su respuesta a la pregunta