у меня есть scrollView с включенным разбиением на страницы и количество страниц N, которые являются UIViews как подпредставления scrollView.
Я пытаюсь сделать следующее:
Пользователь прокручивает страницу до n. На этом этапе 7 CALayers, которые были ранее добавлены к странице номер n (то есть к странице [[scrollView subviews] objectAtIndex: n-1] .layer subLayers]) постепенно появляются, одно за другим.
Но я не могу понять, как заставить CALayers плавно переходить в последовательный поток. До сих пор я пробовал следующие 3 подхода из метода делегирования моего контроллера: (предположим, что у меня есть массив слоев, и их непрозрачность была установлена на 0 при создании)
- (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];
}
}
Но ни один из них, похоже, не работает. Когда пользователь прокручивает правую страницу, все слои становятся видимыми сразу, без особого выцветания и определенно не в каком-либо последовательном порядке.
Есть идеи?