2012-07-31 12 views
5

Więc mam UIView, który ma cienia:dodawania cieni do przyczyn komórkowych laggy przewijanie

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

Mając to na miejscu, mój przewijanie FPS spada do 20-30. Usuń cień, a następnie bum, mój FPS powraca do 60, a przewijanie jest tak gładkie jak masło. Teraz mam pytanie, czy muszę mieć efekt cienia wokół tego widoku pola/kontenera. Jak to osiągnąć bez spowalniania przewijania?

Odpowiedz

16

spróbuj ustawić ścieżkę shadow:

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

Jeśli trzeba ożywić ten pogląd (a zwłaszcza jeśli jest to częścią UITableViewCell) prawdopodobnie zauważy zacina w animacji. Dzieje się tak, ponieważ obliczanie cienia dla widoku wymaga Core Animation do wykonania przejścia renderowania poza ekranem, aby określić dokładny kształt widoku, aby obliczyć, jak renderować jego cień: . (Pamiętaj, widok może być dowolny kształt złożony, ewentualnie nawet z otworami w nim.)

Od On the importance of setting shadowPath.

+0

Jak ustawić promień i inne elementy ścieżką? – aherlambang

+0

również kolor i rzeczy – aherlambang

+0

@aherlambang zaktualizowałam moją odpowiedź ze szczegółami –

1

Zestaw containerFrame.layer.shouldRasterize = YES; Powodem, dla którego spowalnia jest to, że obliczanie cienia jest kosztowne. Rasteryzacja spowoduje zwinięcie widoku na obraz, dzięki czemu będzie znacznie szybszy.

+0

Próbowałem go zrasteryzować .. ale nie jest tak szybki, jak chciałem, jest szybszy – aherlambang

+3

Zbyt szybko? Czy to na poważnie masz na myśli? – borrrden

+0

, która z nich jest lepsza, używając shadowPath lub używając rasteryzacji? – aherlambang

Powiązane problemy