1

我目前有 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"];
}

但是,这只是同时淡入所有图层。我应该怎么做才能按顺序显示它们。

4

2 回答 2

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];
  });
}

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

还有另一种使用CAMediaTiming协议的方法,但可能比这个解决方案更多的代码。

于 2013-09-07T22:01:45.850 回答
0

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

于 2013-09-08T01:33:45.210 回答