我目前正在拍摄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"];
}
然而,这只是同时淡化所有层。我该怎么办才能按顺序显示它们。
答案 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以适当的顺序执行淡入淡出。