2015-10-23 15 views
5

Tôi tạo ra một ứng dụng với UICollectionView như hình ảnh này:Swipe Animation cho loại bỏ tế bào trong UICollectionView - Swift 2.0

enter image description here

Added hai cử chỉ:

Đầu tiên (lên) sẽ xóa các tế bào.

Thứ hai (xuống) sẽ cập nhật ô (lấy dữ liệu mới của CoreData). Các chức năng hoạt động tốt, nhưng không có hoạt ảnh. iOS có một hoạt ảnh rất thú vị kéo ô lên và ô biến mất.

Tôi là người mới bắt đầu trong hoạt ảnh nhanh chóng, vì vậy tôi hơi lạc lõng khi nó.

Câu hỏi của tôi là: Làm cách nào để thêm hoạt ảnh chiếm toàn bộ ô?

Tôi đọc một số câu trả lời trên trang web, nhưng tất cả trong Object-C (like this).

Ai đó có thể giúp tôi không?

+0

Ứng dụng của bạn trông tuyệt vời! –

+0

James, bạn đã từng làm việc này như bạn dự định chưa? Tìm cách triển khai chính xác cùng một loại chức năng trong Swift. Rất thích xem ứng dụng của bạn, nếu làm việc quá! –

Trả lời

12

Cách tốt nhất để đạt được hoạt ảnh trên ô UICollectionView là ghi đè bố cục UICollectionViewLayout. Phương thức của nó sẽ trả về các thuộc tính layout của ô mà bạn muốn xuất hiện/insert/delete.

Ví dụ: Tôi đã tạo một lớp KDCollectionViewFlowLayout kế thừa UICollectionViewFlowLayout và ghi đè thuộc tính xóa.

class KDCollectionViewFlowLayout: UICollectionViewFlowLayout { 

    override func finalLayoutAttributesForDisappearingItemAtIndexPath(itemIndexPath: NSIndexPath) -> UICollectionViewLayoutAttributes? { 
     let attribute = super.finalLayoutAttributesForDisappearingItemAtIndexPath(itemIndexPath) 

     attribute?.transform = CGAffineTransformTranslate(attributes.transform, 0, ITEM_SIZE) 
     attribute?.alpha = 0.0 
     return attribute 

    } 
} 

Bây giờ bạn cần phải gán đối tượng của flowLayout này để xem bộ sưu tập trong cả hai viewDidLoad hoặc bạn có thể gán nó thông qua kịch bản này.

let flowLayout = KDCollectionViewFlowLayout() 
self.collectionView?.setCollectionViewLayout(flowLayout, animated: true) 

Bây giờ, bạn đều đặt ra cho sự biến đổi của tế bào mà bạn quy định tại để finalLayoutAttributesForDisappearingItemAtIndexPath phương pháp bất cứ khi nào bạn thực hiện bất kỳ hoạt động xóa trên collectionView.

Cập nhật

Bạn cần xóa các mục khỏi tầm nhìn bộ sưu tập sử dụng hoạt động hàng loạt.

collectionView.performBatchUpdates({() -> Void in 
    //Array of the data which you need to deleted from collection view 
    let indexPaths = [NSIndexPath]() 
    //Delete those entery from the data base. 

    //TODO: Delete the information from database 

    //Now Delete those row from collection View 

    collectionView.deleteItemsAtIndexPaths(indexPaths) 

}, completion:nil) 
+0

Phải, trong trường hợp đầu tiên, tôi đã cố gắng để phù hợp với mã của tôi, nhưng đã không thành công. Mã của tôi được chia thành ba: Một lớp và hai phần mở rộng. [link] (http://i.stack.imgur.com/DHIQE.png) Làm cách nào để phù hợp với ví dụ của anh ấy trong mã của tôi? Tôi bối rối hơn ban đầu ... – James

+0

Xin lỗi, nhưng đã không làm việc ở đây, bạn có thể đăng liên kết để tải xuống ví dụ của bạn, để tôi thấy trong thực tế cách bạn tổ chức mọi thứ? – James

+0

@James, Perfect [mẫu mã] (https://github.com/mpospese/CircleLayout) để xóa hoạt ảnh. – deoKasuhal

Các vấn đề liên quan