2012-10-17 56 views
1

我有一個集合視圖,其佈局由UICollectionViewFlowLayout實例管理。我有一個長按手勢識別器連接到集合視圖,其工作是檢測長按是否發生在集合視圖中某個單元格的邊界內,如果是,請在動態更改單元格變換後刪除該單元格。替換默認的UICollectionViewCell刪除動畫

這是由手勢識別所執行的動作的相關部分:

UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:indexPath]; 
[UIView animateWithDuration:2.0 animations:^{ 
    cell.layer.transform = CATransform3DMakeScale(1.0, 0.0, 1.0); // an example animation - squish the cell vertically 

} completion:^(BOOL fin) { 
    //[cell.layer removeAllAnimations]; 
    [self.model.numb3rs removeObjectAtIndex:[indexPath row]]; // update model 
    [self.collectionView deleteItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]]; // delete item 
}]; 

的問題是,該刪除方法似乎在其上不膠凝孔的細胞執行其自身的特性的變化/動畫與我的動畫。例如,在這裏試圖實現的效果中,一旦單元格被垂直完全壓扁,我希望它不會再次顯示在視圖中,但deleteItemsAtIndexPaths:調用會導致單元格的「鬼魂」顯示出來然後隨着該方法執行其自己的變換和不透明度動畫而淡出。

我接近完全錯了嗎?可能收集視圖體系結構提供了一種更好的方式來執行我想要的操作,而不是明確地對單元格進行動畫處理,然後像我想要的那樣刪除它。

我希望我可以在這裏得到一個快速的答案,而不必深入研究文檔。

回答

1

我問在蘋果開發者論壇這個問題,並獲悉

-finalLayoutAttributesForDisappearingItemAtIndexPath的:

方法,它是UICollectionViewLayout類的一部分。

無論如何,通過繼承UICollectionViewFlowLayout並重寫此方法,我能夠修改我正在刪除的單元格的屬性 - 特別是轉換。

需要注意的一件事是,該方法不僅可以調用被刪除的單元格,還可以調用在重新佈局期間從其位置移動的單元格。但是寫足夠簡單的代碼來跟蹤被刪除的單元格,並且只修改其屬性。