2012-10-21 44 views
6

Tôi đang hiển thị nhiều ô hình ảnh trong UICollectionView. Với một nút, tôi muốn có thể nhóm tất cả các ô của mình trong ô đầu tiên.UICollectionView: bố cục tùy chỉnh hoạt ảnh

Điều này hoạt động tốt nhưng khi tôi đang cố gắng thêm hoạt ảnh chuyển tiếp vào hoạt động nhóm của tôi, không có gì xảy ra.

Đây là phương pháp tôi sử dụng trong một bố cục tùy chỉnh:

- (NSArray*)layoutAttributesForElementsInRect:(CGRect)rect 
{ 
    NSArray* allAttributesInRect = [super layoutAttributesForElementsInRect:rect]; 

    if([allAttributesInRect count] > 0 && _isRegroup) 
    { 
     UICollectionViewLayoutAttributes *firstAttribute = [allAttributesInRect objectAtIndex:0]; 
     CGRect frame = firstAttribute.frame; 

     for(UICollectionViewLayoutAttributes *attribute in allAttributesInRect) 
      [UIView animateWithDuration:0.3f animations:^{attribute.frame = frame;}]; 
    } 
    return allAttributesInRect; 
} 

- (void)regroupCells:(BOOL)isRegroup // This method is called from my collection controller when my button is pressed 
{ 
    _isRegroup = isRegroup; 
    [self invalidateLayout]; 
} 

Bất kỳ ý tưởng? Cảm ơn!

Trả lời

21

Hoạt ảnh sẽ không hoạt động trong phương thức bạn đang gọi.

Để thay đổi bố cục và tạo ảnh động mới, phương pháp đơn giản nhất là gọi performBatchUpdates trên chế độ xem bộ sưu tập của bạn, với nil cho mỗi thông số khối. Điều này làm mất hiệu lực bố cục và hoạt ảnh của bạn với bố cục mới cho bạn.

Trước khi thực hiện việc này, bạn sẽ cho đối tượng bố cục mà bạn muốn bố cục mới xuất hiện. Ngoài ra, bên trong layoutAttributesForElementsInRect, chỉ cần kiểm tra biến Boolean của bạn và áp dụng khung nhóm (có thể là trung tâm sẽ tốt hơn) cho tất cả các thuộc tính như bạn đang làm bây giờ, nhưng không có hoạt ảnh. Bạn cũng sẽ cần phải tạo lại mã này trong layoutAttributesForElementAtIndexPath.

Vì vậy, trong bản tóm tắt:

  1. Di chuyển cuộc gọi bố trí vô hiệu của bạn từ nơi nó được
  2. Di chuyển các cuộc gọi hình ảnh động từ nơi họ đang có, chỉ sửa đổi cách bố trí các thuộc tính
  3. Thêm mã ..forElementAtIndexPath như cũng
  4. Trong bộ điều khiển chế độ xem của bạn, hãy gọi phương thức nhóm lại trên đối tượng bố cục, sau đó gọi performBatchupdates trên chế độ xem bộ sưu tập.
+0

Cảm ơn! Tôi hiểu nó hoạt động như thế nào :) – Pierre

+0

Đây là kết quả cho những ai muốn xem :) http://d.pr/v/QUTF (Tôi có vấn đề trục trặc) – Pierre

+0

Bạn cần tăng chỉ số z cho "đầu "mục trong ngăn xếp, bạn có thể làm điều đó trong cùng một vị trí khi bạn điều chỉnh khung. – jrturton

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