Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.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
Ios 告诉子例程CAAnimation已完成_Ios_Iphone - Fatal编程技术网

Ios 告诉子例程CAAnimation已完成

Ios 告诉子例程CAAnimation已完成,ios,iphone,Ios,Iphone,我有一个实例方法,它将永远(永不停止)在其shadowOpacity属性上执行UIView的动画 所以我只是把动画代码放到一个while循环中。但问题是,在上一个动画完成之前,子例程循环无法启动 这里我只做一个简单的sleep(0.5)系统调用。它当然留下了一些显示问题 我的问题是如何在这里实现无时间间隔重复动画 - (void)animateShadowRepeatly { CABasicAnimation *animation = [CABasicAnimation animat

我有一个实例方法,它将永远(永不停止)在其shadowOpacity属性上执行UIView的动画

所以我只是把动画代码放到一个while循环中。但问题是,在上一个动画完成之前,子例程循环无法启动

这里我只做一个简单的
sleep(0.5)
系统调用。它当然留下了一些显示问题

我的问题是如何在这里实现无时间间隔重复动画

- (void)animateShadowRepeatly  
{
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"shadowOpacity"];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        while (YES) {
            dispatch_sync(dispatch_get_main_queue(), ^{
                animation.duration = 0.5;
                if (_actionTarget2.layer.shadowOpacity <= 0.1) {
                    animation.fromValue = [NSNumber numberWithFloat:0.0];
                    animation.toValue = [NSNumber numberWithFloat:1.0];
                    _actionTarget2.layer.shadowOpacity = 1.0;
                } else {
                    animation.fromValue = [NSNumber numberWithFloat:1.0];
                    animation.toValue = [NSNumber numberWithFloat:0.0];
                    _actionTarget2.layer.shadowOpacity = 0.0;
                }
                [_actionTarget2.layer addAnimation:animation forKey:@"shadowOpacity"];
            });
            sleep(0.5);//here I must pasuse the while loop until animation on actionTarget2 finished.I think sleep(0.5) here is not a good implement,How to make an elegant implement for the dependency on animation purpose?
         }
    });
}
-(无效)动画重复播放
{
CABasicAnimation*动画=[CABasicAnimation animationWithKeyPath:@“阴影不透明度”];
调度异步(调度获取全局队列(调度队列优先级默认为0)^{
虽然(是){
调度同步(调度获取主队列()^{
animation.duration=0.5;

如果(_actionTarget2.layer.shadowOpacity否,则无法执行此操作。睡眠将阻止动画启动,因为它会阻止主线程。并且无法在背景线程上运行动画

您要做的是将自己设置为动画的代理并添加完成方法。然后在完成方法中触发下一个动画


我在这里写了一篇文章,解释了如何在动画中添加完成块,并在动画完成时触发。请检查

谢谢您的帮助。我创建了一个代理方法来接收此事件,并在其中调用[self AnimateShadorRepeatly]。它可以按我的预期工作。