【发布时间】:2012-02-25 17:21:03
【问题描述】:
我有一个启用分页的滚动视图和 N 个页面,它们是 UIViews 作为滚动视图的子视图。
我正在尝试执行以下操作:
用户滚动到第 n 页。 此时,之前添加到页码 n 的 7 个 CALayers (即到页面[[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];
}
}
但似乎两者都不起作用。当用户滚动到正确的页面时,所有图层都立即可见,没有太多的淡入淡出,而且绝对没有任何顺序。
有什么想法吗?
【问题讨论】:
标签: ios core-animation calayer