Tengo un scrollView con paginación habilitada y un número N de páginas, que son UIViews como subvistas de scrollView.¿Cómo puedo encadenar Core Animations para diferentes capas una después de la otra?
estoy tratando de hacer lo siguiente:
usuario se desplaza a número de página n. En ese momento, 7 CALayers que se agregaron previamente al número de página n (es decir, a la página [[scrollView subviews] objectAtIndex: n-1] .layer subLayers]) se desvanecen, uno tras otro.
Pero no puedo entender cómo hacer que los CALayers se desvanezcan secuencialmente. Hasta ahora, he intentado los siguientes 3 enfoques del método delegado de mi controlador: (supongo que tengo una matriz para las capas y que su opacidad se estableció en 0 al crearlo)
- (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];
}
}
Pero ninguno parece funcionar. Cuando el usuario se desplaza a la página correcta, todas las capas se vuelven visibles a la vez, sin mucho fundido y definitivamente no en orden secuencial.
¿Alguna idea?