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