Mam scrollView z włączoną stronicowaniem i liczbą N stron, które są UIViews jako subviews z scrollView.W jaki sposób mogę łączyć Core Animations dla różnych warstw jeden po drugim?
Próbuję wykonać następujące czynności:
użytkownik przewija do strony numer n. W tym momencie 7 KALKarterów, które zostały poprzednio dodane do numeru strony n (tj. Do strony [[scrollView subviews] objectAtIndex: n-1] subwarstwy .layer) pojawią się jeden po drugim.
Ale nie mogę wymyślić, jak sprawić, aby CALayers zanikły kolejno.Tak daleko, wypróbowałem następujące 3 podejścia z metody delegata mojego kontrolera: (załóżmy mam tablicę do warstw i ich nieprzezroczystość został ustawiony na 0 po utworzeniu)
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
int pageNumber = floor(self.scrollView.contentOffset.x/self.scrollView.frame.size.width);
if(pageNumber == (n-1))
{
int timeOffset = 0;
[CATransaction begin];
for(CALayer *layer in layerArray)
{
CABasicAnimation *a = [CABasicAnimation animationWithKeyPath:@"opacity"];
a.duration = 6;
a.beginTime = timeOffset++;
a.fromValue = [NSNumber numberWithFloat:0.];
a.toValue = [NSNumber numberWithFloat:1.];
[layer addAnimation:a forKey:nil];
}
[CATransaction commit];
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
int pageNumber = floor(self.scrollView.contentOffset.x/self.scrollView.frame.size.width);
if(pageNumber == (n-1))
{
int timeOffset = 0;
[CATransaction begin];
for(CALayer *layer in layerArray)
{
CABasicAnimation *a = [CABasicAnimation animation];
a.duration = 6;
a.beginTime = timeOffset++;
[layer addAnimation:a forKey:@"opacity"];
[layer setOpacity:1];
}
[CATransaction commit];
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
int pageNumber = floor(self.scrollView.contentOffset.x/self.scrollView.frame.size.width);
if(pageNumber == (n-1))
{
int timeOffset = 0;
for(CALayer *layer in layerArray)
{
[CATransaction begin];
CABasicAnimation *a = [CABasicAnimation animation];
a.duration = 6;
a.beginTime = timeOffset++;
[layer addAnimation:a forKey:@"opacity"];
[layer setOpacity:1];
}
for(CALayer *layer in layerArray)
[CATransaction commit];
}
}
Ale nic nie działa. Gdy użytkownik przewinie do właściwej strony, wszystkie warstwy staną się widoczne od razu, bez znacznego zanikania i zdecydowanie nie w żadnej kolejnej kolejności.
Wszelkie pomysły?