2014-12-05 58 views
1

我身邊有15次爲我申請QuartzCore陰影這樣的:陰影滯後於用戶界面

for button in buttonsArray { 
    button.layer.shadowOpacity = 0.75 
    button.layer.shadowColor = UIColor.blackColor().CGColor 
    button.layer.shadowRadius = 2.0 
    button.layer.shadowOffset = CGSize(width: 0.4, height: 1.2) 
} 

當我(在這個例子中一樣)1個視圖有很多這樣的陰影真的開始緩慢和滯後的用戶界面。
我該如何解決它,或者我有什麼其他的替代方案?謝謝!

+0

在哪個設備上? – holex 2014-12-05 08:50:10

+0

@holex不在模擬器上,我只在iOS 8 iPhone 5上測試過它,但我認爲它落後於所有設備 – Eilon 2014-12-05 08:53:32

+0

可能的重複[爲什麼爲任何圖層添加陰影太重?使用QuartzCore](http://stackoverflow.com/questions/16197121/why-add-shadow-to-any-layer-is-too-heavy-using-quartzcore) – 2014-12-05 10:02:38

回答

1

查看WWDC 2014視頻「適用於iOS應用程序的高級圖形和動畫」。

https://developer.apple.com/videos/wwdc/2014/

35:50在...它談到爲什麼使用這種類型的代碼來生成陰影造成額外關閉屏幕通行證的GPU,因爲它計算出陰影的形狀。

建議的解決方案是同時使用shadowPath屬性層上,如果你已經知道了影子的形狀......

這是一個偉大的視頻觀看。

+0

'shadowPath'是** **的方式走。 – Cyrille 2014-12-05 10:14:23

0

根據按鈕的外觀,一個想法是使用包含陰影的按鈕的背景圖像,而不是在代碼中添加陰影。您還可以使用resizableImageWithCapInsets來製作各種可能的按鈕尺寸。在resizableImageWithCapInsets

UIImage* image = [UIImage imageNamed:@"button.png"]; 
UIEdgeInsets insets = UIEdgeInsetsMake(16, 6, 16, 6); // change the insets to fit your needs 
image = [image resizableImageWithCapInsets:insets]; 
[button setBackgroundImage:image forState:UIControlStateNormal]; 

文檔可在

找到這個解決方案可能不適合你,取決於你如何按鈕看起來。但是使用圖片而不是從代碼添加陰影應該會加速您的代碼。