2015-08-03 14 views
12

Tôi đã có một tùy chỉnh UICollectionViewFlowLayout hoạt hình phải lảo đảo quan điểm từ cánh phải với chèn và ra trái với xóa. Nó thực hiện nó bằng cách thiết lập một CABasicAnimation trên UICollectionViewLayoutAttributes và áp dụng này vào lớp tế bào.Tuỳ chỉnh UICollectionViewFlowLayout hoạt hình

Screen Grab

CollectionViewAnimations Project on GitHub

Các alpha mặc định là 0 và nó mờ dần ra khỏi các tế bào của tôi và kết thúc hoạt hình tùy chỉnh của tôi sớm. Nếu tôi thay đổi alpha thành 1 thì tôi không thấy hoạt hình của mình chút nào. Tôi đặt nó ở mức 0.5 và tôi nhận được một chút của cả hai .... nó là lạ. Bạn sẽ phải chạy dự án của tôi để xem những gì tôi có ý nghĩa.

AnimatingFlowLayout.swift

Đối với một số lý do, tôi dường như không thể gỡ bỏ hoàn toàn alpha mặc định trên các thuộc tính trong finalLayoutAttributesForDisappearingItemAtIndexPath.

Bất kỳ ai có ý tưởng nào?

Trả lời

1

Bạn đang sử dụng performBatchUpdates(_:completion:) đã làm động các thay đổi bạn đã đặt trong finalLayoutAttributesForDisappearingItemAtIndexPath(_:), vì vậy nếu bạn thêm CABasicAnimation, bạn sẽ thêm hoạt ảnh vào hoạt ảnh đã diễn ra. Nếu bạn thả các hình ảnh động từ CellLayoutAttributes của bạn và chỉ cần thiết lập các transform3D của UICollectionViewLayoutAttributes nó sẽ làm những gì bạn muốn (trừ các hình ảnh động beginTimefillMode). Đoạn mã này hoạt động tốt đối với tôi:

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

Để có hiệu ứng 'beginTime' của hoạt ảnh, bạn có thể thêm từng ô một như chúng đã đề xuất [ở đây] (http://aplus.rs/2014/ how-to-animate-in-uicollectionview-items /). 'UICollectionView' cũng sử dụng thời lượng mặc định để hiển thị ô animate. Và trông giống như không có cách nào để thay đổi nó theo một cách thích hợp/không hacky. – sgl0v

+0

"ngoại trừ hoạt ảnh beginTime và fillMode" - đó là toàn bộ điểm của hoạt ảnh này ... hiệu ứng lảo đảo. – bandejapaisa

+0

điểm được bạn đang thêm hình ảnh động để hình ảnh động đã liên tục – libec

0

này làm việc cho tôi, đối với một vấn đề tương tự:

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 
    } 

} 

Bạn nói rằng bạn không thể có được alpha mặc định ra đi trong phương pháp này, nhưng nó hoạt động khi tôi thử nó trên tvOS 11.