2015-08-03 15 views
12

Ho un'animazione UICollectionViewFlowLayout personalizzata che interrompe le visualizzazioni da destra con inserimenti e verso sinistra con delezioni. Lo fa impostando CABasicAnimation su UICollectionViewLayoutAttributes e applicando questo al livello cella.Animazione personalizzata UICollectionViewFlowLayout

Screen Grab

CollectionViewAnimations Project on GitHub

L'alfa di default è 0 e la sua dissolvenza mie cellule e termina il mio Animazione personalizzata presto. Se cambio l'alfa in 1, allora non vedo affatto la mia animazione. L'ho impostato a 0.5 e ne ho un po 'entrambi ... è strano. Dovresti eseguire il mio progetto per vedere cosa intendo.

AnimatingFlowLayout.swift

Per qualche ragione, non riesco a rimuovere completamente l'alfa di default sugli attributi in finalLayoutAttributesForDisappearingItemAtIndexPath.

Qualcuno ha qualche idea?

risposta

1

Si sta utilizzando performBatchUpdates(_:completion:) che anima già le modifiche impostate in finalLayoutAttributesForDisappearingItemAtIndexPath(_:), quindi se si aggiunge lo CABasicAnimation si aggiunge animazione all'animazione che è già in corso. Se si rilascia l'animazione dal proprio CellLayoutAttributes e si imposta semplicemente lo transform3D di UICollectionViewLayoutAttributes, farà ciò che si desidera (ad eccezione dell'animazione beginTime e fillMode). Questo pezzo di codice funziona bene per me:

override func finalLayoutAttributesForDisappearingItemAtIndexPath(itemIndexPath: NSIndexPath) -> UICollectionViewLayoutAttributes? { 
    let attributes: CellLayoutAttributes = super.finalLayoutAttributesForDisappearingItemAtIndexPath(itemIndexPath) as! CellLayoutAttributes 
    // Default is 0, if I set it to 1.0 you don't see anything happen..' 
    attributes.alpha = 1 
    let endX = -CGRectGetWidth(self.collectionView!.frame) 
    var endTransform: CATransform3D = CATransform3DMakeTranslation(endX, 0, 0) 
    attributes.transform3D = endTransform 

    return attributes 
} 
+1

Per ottenere l'effetto 'beginTime' dell'animazione, è possibile aggiungere le celle uno per uno come hanno proposto [qui] (http://aplus.rs/2014/ how-to-animato-in-uicollectionview-items /). Anche 'UICollectionView' usa la durata predefinita per animare l'aspetto della cella. E sembra che non ci sia modo di cambiarlo in un modo corretto/non-hacky. – sgl0v

+0

"tranne l'animazione beginTime and fillMode" - questo è il punto principale di questa animazione ... l'effetto sfalsato. – bandejapaisa

+0

punto in cui si aggiunge animazione ad animazione già in corso – libec

0

Questo ha funzionato per me, per un problema simile:

import UIKit 

class NoFadeFlowLayout: UICollectionViewFlowLayout { 

    override func initialLayoutAttributesForAppearingItem(at itemIndexPath: IndexPath) -> UICollectionViewLayoutAttributes? { 
     let attrs = super.initialLayoutAttributesForAppearingItem(at: itemIndexPath) 
     attrs?.alpha = 1.0 
     return attrs 
    } 

    override func finalLayoutAttributesForDisappearingItem(at itemIndexPath: IndexPath) -> UICollectionViewLayoutAttributes? { 
     let attrs = super.finalLayoutAttributesForDisappearingItem(at: itemIndexPath) 
     attrs?.alpha = 1.0 
     return attrs 
    } 

} 

Hai detto che non si poteva ottenere l'alfa di default di andare via in questo metodo, ma ha funzionato quando l'ho provato su tvOS 11.

Problemi correlati