如何在另一个图层CALayer之后对一个图层执行淡入效果

时间:2013-09-07 21:46:27

标签: ios objective-c calayer cabasicanimation

我目前正在拍摄3张照片,我的目标是逐渐淡入一层,所以第一张渐渐淡出,然后是第二张,最后一张。完成

我正在做的是

for (UIImageView *imageView in arr) {
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
    animation.fromValue =   [NSNumber numberWithFloat:0.0];
    animation.toValue   =   [NSNumber numberWithFloat:1.0];
    animation.duration  =   4;
    animation.removedOnCompletion   =   NO;
    animation.fillMode  =   kCAFillModeBoth;
    [imageView.layer addAnimation:animation forKey:@"opacityAnimation"];
}

然而,这只是同时淡化所有层。我该怎么办才能按顺序显示它们。

2 个答案:

答案 0 :(得分:0)

使用以下方式标记您的图片视图10,20,30。然后,

-(void)addAnimationToView:(UIView*)image {
  CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
  animation.fromValue =   [NSNumber numberWithFloat:0.0];
  animation.toValue   =   [NSNumber numberWithFloat:1.0];
  animation.duration  =   4;
  animation.removedOnCompletion   =   NO;
  animation.fillMode  =   kCAFillModeBoth;
  [imageView.layer addAnimation:animation forKey:@"opacityAnimation"];
}

for (int i=0; i<3; i++) {
  UIImageView *image = (UIImageView*) [self.view viewWithTag:(i+1)*10];
  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 
         i*4 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
    [self addAnimationToView:image];
  });
}

也许您必须在image的前缀__block前加上CAMediaTiming,但我认为没有必要。

使用{{1}}协议还有另一种方法,但也许这个代码比这个解决方案更多。

答案 1 :(得分:0)

您可以使用performselector:afterDelay以适当的顺序执行淡入淡出。