CAKeyframeAnimation 和音频同步
Posted
技术标签:
【中文标题】CAKeyframeAnimation 和音频同步【英文标题】:CAKeyframeAnimation and audio sync 【发布时间】:2011-09-26 14:49:58 【问题描述】:我正在使用 CAKeyframeAnimation 在我的应用程序中执行一些动画。我想与动画一起播放音频文件(有时在期间,有时在之后)。我怎样才能做到这一点?是否有 CAKeyframeAnimation 的 AnimationDidStopSelector 或有其他方法可以做到这一点?
UIBezierPath *movePath = [UIBezierPath bezierPath];
[movePath moveToPoint:imageAnimation.center];
[movePath addQuadCurveToPoint:CGPointMake(839, 339)
controlPoint:CGPointMake(671, 316)];
CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
moveAnim.path = movePath.CGPath;
CAAnimationGroup *animGroup = [CAAnimationGroup animation];
animGroup.animations = [NSArray arrayWithObjects:moveAnim, nil];
animGroup.duration = 0.5;
imageAnimation.layer.position = CGPointMake(839, 339);
imageAnimation.tag = 0;
[imageAnimation.layer addAnimation:animGroup forKey:nil];
break;
【问题讨论】:
【参考方案1】:其实是有的。首先将自己指定为代表:
animGroup.delegate = self
如果你想使用不同的动画,你可以使用 KVC 来区分它们:
[yourAnimation setValue:@"firstAnimation" forKey:@"animationName"];
然后实现这个方法
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
if (flag && [[anim valueForKey:@"animationName"] isEqualToString:@"firstAnimation"])
//play your sound
else if (flag && [[anim valueForKey:@"animationName"] isEqualToString:@"secondAnimation"])
//do something else
【讨论】:
感谢 BartosZ。我必须在[imageAnimation.layer addAnimation:animGroup forKey:nil];
之后显式调用animationDidStop: 方法吗?
不,它会在动画停止后自动调用。
如果我有多个 CA Group 动画,我如何在 animationDidStop: 方法中有条件语句?
谢谢。我会尝试这种方法,并会回复你。问候,亚历克斯。以上是关于CAKeyframeAnimation 和音频同步的主要内容,如果未能解决你的问题,请参考以下文章
CAAnimationGroup 与 CAKeyframeAnimation 和 CABasicAnimation
如何使用 CAKeyframeAnimation 变换旋转检测某些旋转进度?