2013-02-27 5 views
35

У меня есть CABasicAnimation и вы хотите запустить его после задержки. В UIKit я могу указать задержки. Протокол CAMediaTiming имеет свойство timeOffset, но я не вижу эффекта. Моя следующая попытка - использовать GCD, чтобы задержать его, но он чувствует себя излишним.Как задержать CABasicAnimation?

+0

Я бы просто использовать НОД. 'dispatch_after (popTime, dispatch_get_main_queue(),^(void) { <#код будет выполнен в основной очереди после задержки #> });' – BooRanger

+1

@BooRanger, что не так с свойством beginTime? –

+0

[Этот ответ] (http://stackoverflow.com/a/11625742/608157) должен ответить на ваш вопрос –

ответ

77

Нельзя использовать [CAMediaTiming beginTime] (reference)?

См. Настройка времени анимации в Core Animation Programming Guide.

CABasicAnimation *animation; 
animation.beginTime = CACurrentMediaTime() + 0.3; //0.3 seconds 
+70

Просто помните, что это 'CACurrentMediaTime() + yourDelay' –

+1

Я не могу использовать это для AVVideoCompositionCoreAnimationTool. Единственное, что работает, это AVCoreAnimationBeginTimeAtZero. Мне нужна небольшая задержка для моей анимации ... – Nil

+0

@grisleyB, та же проблема, с которой сталкивается меня. Вы нашли что-нибудь ??? –

10

В Swift 3.0:

func animateYourView() { 
    let myDelay = 5.0 
    let scalePulseAnimation: CABasicAnimation = CABasicAnimation(keyPath: "transform.scale") 
    scalePulseAnimation.beginTime = CACurrentMediaTime() + myDelay 
    scalePulseAnimation.duration = 0.5 
    scalePulseAnimation.repeatCount = 2.0 
    scalePulseAnimation.autoreverses = true 
    scalePulseAnimation.fromValue = 1.0 
    scalePulseAnimation.toValue = 0.5 
    myView.layer.add(scalePulseAnimation, forKey: "scale") 
} 

Где ключ линия задержки является:

scalePulseAnimation.beginTime = CACurrentMediaTime() + myDelay 
Смежные вопросы