2010-10-20 78 views
3

我有一個UITableViewCell子類,它在drawRect:方法中進行繪製。整個矩形都是自定義繪製的,包括背景。 我能夠在保持滾動非常平滑的同時獲得非常複雜的單元格。定製UITableViewCell和setSelected動畫:動畫:

我的問題:每當出現視圖時,我都會撥打[table deselectRowAtIndexPath:path animated:YES];,以符合Apple的HIG。但是,不會發生動畫。當我有一個透明的自定義視圖(用子視圖創建)時它工作正常,所以當然會出現蘋果的背景。現在它不。

我的drawRect:在「動畫時間」中調用一次,大約一半。我認爲這是因爲它將單元格的突出顯示的屬性從1設置爲0,當它降到0.5以下時,它會捕捉到0。

如何爲此過渡設置動畫?我的猜測是使用通常的beginAnimations:等等,並將我的單元格對象中的自定義浮點字段從1改爲0。這是否會將drawRect:重複設置爲動畫?

更新 我設法讓這幾乎工作。我已經覆蓋setSelected:animated:如下所示:

- (void) setSelected:(BOOL)selected animated:(BOOL)animated { 
    [super setSelected:selected animated:NO]; 

    if (animated) { 
     [CATransaction begin]; 
     CATransition* animation = [CATransition animation]; 
     animation.type = kCATransitionFade; 
     animation.duration = 0.6; 
     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 
     [view.layer addAnimation:animation forKey:@"deselectRow"]; 
     [CATransaction commit]; 
    } 
} 

如果桌面視圖在屏幕上,這個效果很好。但是,如果我從導航(後退)返回到表格視圖,而不是從選中淡入到未選中狀態,則它會從不可見狀態變爲未選狀態。什麼會導致這種情況?

+0

那麼,如何你的執行'的setSelected:動畫:'你'UITableViewCell'子看? – 2010-10-20 23:06:28

+0

我的問題基本上是如何編碼::) – mips 2010-10-20 23:07:01

+0

您需要重寫該方法,以避免調用在超類上定義的代碼,並創建自己的動畫。如果您不知道如何爲Google製作動畫,請執行此操作。 – vfn 2010-10-21 03:10:26

回答

7

有點遲到的答案,但可能對你和其他人有用。你需要做的,是短信超級之前,您的自定義選擇的視圖分配,像這樣:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    UIView *view = [[UIView alloc] initWithFrame:self.frame]; 
    view.backgroundColor = [UIColor colorWithRed:.9 green:.0 blue:.125 alpha:1.0]; 

    self.selectedBackgroundView = view; 

    [super setSelected:selected animated:animated]; 
} 
+0

我使用了UIImageView和自定義選擇漸變。這是有點假,但看起來很完美。謝謝! – steipete 2011-02-27 11:45:12

+6

您應該在創建時設置單元格的selectedBackgroundView,而不是setSelected:animated:方法;這將導致它不必要地被重複設置。 – titaniumdecoy 2012-01-14 21:30:30