У меня есть метод экземпляра, который будет выполнять анимацию UIView по свойству shadowOpacity навсегда (никогда не останавливаться).Скажите подпрограмме, что завершена CAAnimation
Поэтому я просто помещал коды анимации в цикл while. Но проблема в том, что цикл подпрограммы не может начаться, пока не закончится предыдущая анимация.
Здесь я просто сделаю простой системный вызов sleep(0.5)
. Это, безусловно, оставило некоторые проблемы с отображением.
Мой вопрос заключается в том, как реализовать повторную анимацию NO-TIME-GAP здесь?
- (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?
}
});
}
благодарит за вашу помощь. Я создаю метод делегата для получения этого события, и внутри него я делаю вызов [self animateShadowRepeatly]. Это работает как мое ожидание. – chenniao