2012-07-31 57 views
5

所以我有有陰影的UIView:添加陰影細胞的原因laggy滾動

[containerFrame.layer setShadowOffset:CGSizeMake(0, 1)]; 
[containerFrame.layer setShadowRadius:4.0]; 
[containerFrame.layer setShadowColor:[UIColor colorWithRed:34/255.f green:25/255.f blue:25/255.f alpha:1.0].CGColor]; 
[containerFrame.layer setShadowOpacity:0.4]; 

本的地方,我的滾動FPS下降到20-30。除去陰影,然後繁榮,我的FPS回到60,滾動像黃油一樣光滑。現在的問題是我需要在這個盒子/容器視圖周圍有陰影效果。如何在不減慢滾動的情況下實現這一目標?

回答

16

嘗試設置陰影路徑:

[containerFrame.layer setShadowOffset:CGSizeMake(0, 1)]; 
[containerFrame.layer setShadowRadius:4.0]; 
[containerFrame.layer setShadowColor:[UIColor colorWithRed:34/255.f green:25/255.f blue:25/255.f alpha:1.0].CGColor]; 
[containerFrame.layer setShadowOpacity:0.4]; 

// New line 
[containerFrame.layer setShadowPath:[UIBezierPath bezierPathWithRect:containerFrame.bounds].CGPath]; 

如果你有動畫這種觀點(尤其是如果它是一個 的UITableViewCell的一部分),你可能會發現在動畫口吃。 這是因爲計算您的視圖的投影需要 核心動畫執行屏幕外渲染過程以確定您的視圖的確切形狀,以便弄清楚如何呈現其投影陰影效果 。 (記住,你的看法可能是任意複雜形狀,可能 甚至有孔)。

On the importance of setting shadowPath

+0

如何設置路徑的半徑和東西? – aherlambang 2012-07-31 04:59:21

+0

也是顏色和東西 – aherlambang 2012-07-31 05:00:01

+0

@aherlambang更新了我的回答詳情 – 2012-07-31 05:01:54

1

設置containerFrame.layer.shouldRasterize = YES;它減慢的原因是因爲計算陰影是昂貴的。柵格化會將視圖摺疊成圖像,因此速度會更快。

+0

我嘗試柵格化它..但它沒有我想要的那樣快,它更快 – aherlambang 2012-07-31 05:00:22

+3

太快?這是你的意思嗎? – borrrden 2012-07-31 05:04:22

+0

那麼哪個更好,使用shadowPath還是使用光柵化? – aherlambang 2012-07-31 05:08:03