当前位置:  开发笔记 > IOS > 正文

动画多个CALayers,但不在同一时间空间

如何解决《动画多个CALayers,但不在同一时间空间》经验,为你挑选了3个好方法。

我有几个CALayers我试图动画一个新的zPosition,每个层稍微延迟与其他层.

每个动画应该花费0.25秒并在上一个动画开始后0.05秒开始.在每个动画结束时,图层将从图层树中删除.

我已成功使用-animationDidStop:finished:委托方法删除我们的图层,但我无法正确订购动画.

是否可以以这种方式安排动画,以及如何安排?



1> Ashley Clark..:

我还是想听听别人的建议,但我想我已经解决了这个问题.

我现在正在创建特定CAAnimation对象并指定其beginTime属性.我之前正在做这件事并且它不起作用,我最终意识到,为了beginTime尊重这个属性,必须将动画添加到一个CAAnimationGroup.

所以,我的代码看起来像这样:

NSArray *layers = /* layers to be animated away */
CGFloat startOffset = 0.01;

for (NSInteger index = 0; index < layers.count; index++) {
    CALayer *layer = [layers objectAtIndex:index];

    CABasicAnimation *zoomOut = [CABasicAnimation animationWithKeyPath:@"zPosition"];
    zoomOut.toValue = [NSNumber numberWithDouble:400.0];
    zoomOut.beginTime = index * startOffset;

    CAAnimationGroup *group = [CAAnimationGroup animation];
    group.animations = [NSArray arrayWithObject:zoomOut];
    group.delegate = self;

    [layer addAnimation:group forKey:@"zoomAway"];
}



2> kkahl..:

我发现如果你将它的值作为QuartzCore的CACurrentMediaTime()函数返回的值的delta作为一个值,那么BeginTime属性确实可以在不将动画放入组的情况下工作.

例如 anim.beginTime = CACurrentMediaTime() + 0.05;



3> 小智..:

我希望我有代表发表评论,但是将anim.beginTime设置为CACurrentMediaTime()的原因是由其他一些文档揭示的:

AVCoreAnimationBeginTimeAtZero使用此常量将CoreAnimation的动画beginTime属性设置为时间0.常量是一个小的非零正值,可防止CoreAnimation用CACurrentMediaTime替换0.0.适用于iOS 4.0及更高版本.在AVAnimation.h中声明.

因此,将beginTime正常设置为0是将其设置为CACurrentMediaTime()的简写.所以你可以使用它来错开各组的开始.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有