2012-08-06 15 views
0

我使用UITableView構建新聞Feed列表表。對於每一行我創建矩形電池使用內部定製UITableViewCellQuartzCore layer.shadow

示例代碼映射:使用layer.shadow時的Objective-C性能優化

-(void)drawRect:(CGRect)rect 
{ 
    UIView *bgView = [[UIView alloc] initWithFrame:self.bounds]; 
    bgView.backgroundColor = [UIColor whiteColor]; 

    bgView.layer.shadowColor = [UIColor blackColor].CGColor; 
    bgView.layer.shadowOffset = CGSizeMake(0, 1); 
    bgView.layer.shadowOpacity = 0.2; 
    bgView.layer.shadowRadius = 1; 

    self.backgroundView = bgView; 
    [bgView release]; 
} 

當我測試應用程序,滾動UITableView,滾動性能差!如果我刪除了影子,表現很好!

我需要您的建議。爲了獲得最佳性能,我可以做什麼樣的優化?

回答

1

你的問題不是Objective-C,而是陰影!自iOS 3.2開始,您可以爲陰影定義CGPathRef,您應該創建一個僅包含視圖輪廓的窗口,以縮短渲染時間並提高性能。你也可以通過柵格柵格化來避免重繪它(設置你的圖層的shouldRasterize屬性爲YES。根據你想要對圖層做什麼,這可能不是最好的選擇,它也是一個內存/性能折衷,請記住!)。

創建所需陰影路徑的最簡單方法應該是通過UIBezierPath類,該類有很多有用的類方法來構建各種形成的對象,但根據視圖的形狀,可能必須回退用手建立你自己的路徑。

+0

當我做了shouldRasterize = YES;陰影質量變差。 – 2012-08-06 07:42:28

+0

@AlmasAdilbek就像我說的那樣,這只是一個開啓以進一步提高性能的選項。您不必啓用它,並且在某些情況下甚至會導致結果變差(並堵塞內存)。 – JustSid 2012-08-06 07:57:04

+0

如果啓用了shouldRasterize,則還必須設置rasterizationScale = [UIScreen mainScreen] .scale,否則即使在Retina設備上也會以標準def渲染(這可能是因爲它看起來很糟糕)。 – 2013-04-26 11:29:33

0

你如何實現UITableView委託? 你有沒有使用再利用,例如像創建UITableViewCell


-[UITableView dequeueReusableCellWithIdentifier:] 

請檢查一下。

+0

當然,我這樣做 – 2012-08-06 07:41:11