Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c CAKeyframeAnimation和音频同步_Objective C_Cakeyframeanimation - Fatal编程技术网

Objective c CAKeyframeAnimation和音频同步

Objective c CAKeyframeAnimation和音频同步,objective-c,cakeyframeanimation,Objective C,Cakeyframeanimation,我正在使用CAKeyframeAnimation在我的应用程序中执行一些动画。我想在播放动画的同时播放一个音频文件(有时在播放期间,有时在播放之后)。我怎样才能做到这一点?是否有用于CAKeyframeAnimation的AnimationDidStopSelector,或者是否有其他方法来执行此操作 UIBezierPath *movePath = [UIBezierPath bezierPath]; [movePath moveToPoint:imageAnimati

我正在使用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;

事实上有。首先将自己指定为代表:

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
    }
}

谢谢巴托斯。我是否必须在
[imageAnimation.layer addAnimation:animGroup forKey:nil]之后显式调用animationDidStop:method?否,动画停止后将自动调用它。如果我有多个CA组动画,如何在animationDidStop:method中包含条件语句?谢谢。我会试试这个方法,然后再给你回复。你好,亚历克斯。