2012-07-31 28 views
5

Yani bir gölge olan bir UIView var Kaydırmada gecikme: yerinde bununlaekleyerek gölge

[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]; 

, benim kaydırma FPS 20-30 düşer. Gölgeyi ve ardından patlamayı çıkarın, FPS'im 60'a geri dönüyor ve kaydırma tereyağı kadar yumuşak. Şimdi soru bu kutu/konteyner görünümü etrafında bir gölge etkisi var ti ihtiyacım var. Kaydırmayı yavaşlatmadan bunu nasıl başarabilirim? Gölge yolunu ayarlayarak

cevap

16

Dene:

[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]; 

Bu görünümü canlandırmak varsa (ve bir UITableViewCell parçası özellikle) muhtemelen animasyon atlar göreceksiniz. Bunun nedeni, görünümünüzün alt gölgesini hesaplamak için Çekirdek Animasyonu'nun damla şeklini belirlemek üzere bir ekran görüntüsü oluşturma geçişi yapmasını gerektirmesidir. Bu nedenle, gölgesinin nasıl bırakılacağını anlamak için görünümünüzün tam şeklini belirleyin. (Unutmayın, görüş bile delikleriyle muhtemelen , herhangi bir karmaşık şekli olabilir.) On the importance of setting shadowPath itibaren

.

+0

Yarıçapı ve nesneleri bir yolla nasıl ayarlayabilirim? – aherlambang

+0

da renk ve malzeme – aherlambang

+0

@aherlambang benim cevabım ile güncellendi –

1

Ayar containerFrame.layer.shouldRasterize = YES; Yavaşlatılmasının nedeni, gölge hesaplamanın pahalı olmasıdır. Rasterleştirme, görüntüyü bir görüntünün içine alacak ve böylece daha hızlı olacaktır.

+0

Rasterleştirmeyi denedim .. ama istediğim kadar hızlı değil, daha hızlı – aherlambang

+3

Çok mu hızlı? Bu ciddi olarak ne demek istiyorsun? – borrrden

+0

böylece hangisi daha iyi, shadowPath kullanarak veya rasterize kullanarak? – aherlambang