2013-02-27 26 views
35

Mam CABasicAnimation i chcę uruchomić po opóźnieniu. W UIKit mogę określić opóźnienia. Protokół CAMediaTiming ma właściwość timeOffset, ale nie widzę żadnego efektu. Moją kolejną próbą jest użycie GCD do opóźnienia, ale wydaje się, że to przesada.Jak opóźnić zadzwonienie do CABasic?

+0

Chciałbym po prostu użyć GCD. 'dispatch_after (popTime, dispatch_get_main_queue(),^(void) { <# kod do wykonania w głównej kolejce po opóźnieniu #> });' – BooRanger

+1

@BooRanger co jest nie tak z właściwością 'beginTime'? –

+0

[Ta odpowiedź] (http://stackoverflow.com/a/11625742/608157) powinien odpowiedzieć na twoje pytanie –

Odpowiedz

77

Nie powinieneś używać właściwości [CAMediaTiming beginTime] (reference)?

Zobacz Dostosowywanie czasu animacji w Core Animation Programming Guide.

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

Pamiętaj tylko, że jest to 'CACurrentMediaTime() + yourDelay' –

+1

Nie jestem w stanie użyć tego dla AVVideoCompositionCoreAnimationTool. Jedyne, co działa, to AVCoreAnimationBeginTimeAtZero. Chcę trochę opóźnienia w mojej animacji ... – Nil

+0

@grisleyB, Ten sam problem dotyczy mnie. Znalazłeś coś? –

10

w 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") 
} 

gdzie klucz linia za opóźnienie wynosi:

scalePulseAnimation.beginTime = CACurrentMediaTime() + myDelay