2015-08-03 19 views
12

Ich habe eine benutzerdefinierte UICollectionViewFlowLayout-Animation, die Ansichten von rechts mit Einfügungen und links mit Löschungen versetzt. Dazu wird eine CABasicAnimation auf UICollectionViewLayoutAttributes gesetzt und auf die Zellenebene angewendet.Benutzerdefinierte UICollectionViewFlowLayout Animation

Screen Grab

CollectionViewAnimations Project on GitHub

Die Standard-alpha ist 0 und die meine Zellen Ausblendung und endet früh meine benutzerdefinierte Animation. Wenn ich das Alpha auf 1 ändere, sehe ich meine Animation überhaupt nicht. Ich setze es auf 0,5 und ich bekomme ein bisschen von beiden ... es ist komisch. Du müsstest mein Projekt ausführen, um zu sehen, was ich meine.

AnimatingFlowLayout.swift

Aus irgendeinem Grund kann ich scheinen nicht ganz den Standard-Alpha auf den Attributen in finalLayoutAttributesForDisappearingItemAtIndexPath zu entfernen.

Wer hat irgendwelche Ideen?

Antwort

1

Sie verwenden performBatchUpdates(_:completion:), die bereits die Änderungen animiert, die Sie in finalLayoutAttributesForDisappearingItemAtIndexPath(_:) festgelegt haben. Wenn Sie also die CABasicAnimation hinzufügen, fügen Sie der Animation Animation hinzu, die bereits passiert. Wenn Sie die Animation von Ihrer CellLayoutAttributes fallen lassen und einfach die transform3D von UICollectionViewLayoutAttributes setzen, wird es tun, was Sie wollen (mit Ausnahme der Animation beginTime und fillMode). Dieses Stück Code funktioniert gut für mich:

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

Um den 'beginTime' Effekt der Animation zu bekommen, können Sie Ihre Zellen einzeln hinzufügen, wie sie vorgeschlagen [hier] (http://aplus.rs/2014/) How-to-animieren-in-uicollectionview-items /). Auch "UICollectionView" verwendet die Standarddauer, um das Aussehen der Zelle zu animieren. Und es sieht so aus, als ob es keine Möglichkeit gibt, es auf eine angemessene/nicht-hacky Weise zu ändern. – sgl0v

+0

"außer der animation beginTime und fillMode" - das ist der springende Punkt dieser Animation ... der gestaffelte Effekt. – bandejapaisa

+0

Punkt ist, dass Sie Animation zu bereits laufenden Animation hinzufügen – libec

0

Das ist für mich gearbeitet, für ein ähnliches Problem:

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 
    } 

} 

Sie sagten, Sie nicht die Standard-alpha bekommen konnte in diesem Verfahren gehen weg, aber es funktionierte, als ich es auf tvOS 11 versuchte.

Verwandte Themen