2011-04-12 165 views
3

我的目標是讓一個UITableViewCell滑過屏幕的一側(如Twitter),然後從另一側滑回。我能夠讓單元格滑出屏幕右側,但我似乎無法弄清楚如何從左後角將它滑回屏幕上。這裏是我的代碼滑動它的權利:幻燈片UITableViewCell

UITableViewCell *cell = [self cellForRowAtIndexPath:indexPath]; 
[cell.layer setAnchorPoint:CGPointMake(0, 0.5)]; 
[cell.layer setPosition:CGPointMake(cell.frame.size.width, cell.layer.position.y)]; 
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position.x"]; 
[animation setRemovedOnCompletion:NO]; 
[animation setDelegate:self]; 
[animation setDuration:0.14]; 
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]]; 
[cell.layer addAnimation:animation forKey:@"reveal"]; 

感謝您的任何幫助!

回答

6

UITableView提供了插入和刪除動畫行的方法,併爲您處理所有的動畫。嘗試是這樣的:

[tableView beginUpdates]; 
[tableView deleteRowsAtIndexPaths:myIndexPaths 
       withRowAnimation:UITableViewCellRowAnimationRight]; 
[tableView endUpdates]; 

然後在新的細胞幻燈:

[tableView beginUpdates]; 
[tableView insertRowsAtIndexPaths:myNewIndexPaths 
       withRowAnimation:UITableViewCellRowAnimationLeft]; 
[tableView endUpdates]; 

beginUpdates/endUpdates方法使動畫進行批處理並一次全部執行。

謹防兩兩件事:

  1. 隨着大量表中的數據,插入可能需要較長的時間(expecially如果你基本上是更換整個表)。在這種情況下調用[tableView reloadData]效果更好,但deleteRowsAtIndexPath:withRowAnimation:仍然可以用於很好的視覺效果。

  2. 您必須確保支持您表格的實際數據相應且正確地更改。也就是說,如果要從表中刪除或插入行,那麼提供表的數組(或其他)必須也正確反映每個步驟中表中有多少行。

+0

這對我而言不起作用(請參閱我對XJones的回答的評論)。我真正需要的是一種與我的問題相反的方式。 – edc1591 2011-04-12 20:56:15

+0

我使用了我所描述的技術來爲自定義表格單元格進行動畫處理,以瞭解它的價值。祝你好運! – 2011-04-12 21:02:17

2

你想要的行爲應該通過動畫細胞的子視圖來完成,而不是細胞本身。牢房應該留在桌子上。在contentArea中創建一個包含所需子視圖的自定義單元格,然後根據需要將其打開/關閉。

基於標準UIView塊的動畫應該也適用於此。

+0

我實際上必須爲實際的單元格而不是視圖設置動畫,因爲這是針對越獄設備的MobileSubstrate調整。我在MobileMusicPlayer應用程序的單元格中執行此操作,他們使用自定義的UITableViewCell實現自定義的UIView作爲內容視圖,並且我無法訪問這些視圖。因此,創建自定義單元格也不是一種選擇。 – edc1591 2011-04-12 20:21:27

+0

我會接受你的話。一般來說,如果你有權訪問單元格,那麼你可以訪問contentView屬性(不管單元格的超類是什麼)並且可以是動畫的。動畫實際的細胞可能會導致不可預知的副作用/行爲。希望你得到它的工作。 – XJones 2011-04-12 20:24:21

+0

在單元格中調用'contentView'返回nil。顯然,MobileMusicPlayer中的單元不是空的。蘋果公司並沒有在他們的自定義單元中放置一個屬性來訪問內容視圖。 – edc1591 2011-04-12 20:25:48