2013-02-27 33 views
35

Tôi có một số CABasicAnimation và muốn bắt đầu sau một thời gian trễ. Trong UIKit tôi có thể chỉ định sự chậm trễ. Giao thức CAMediaTiming có thuộc tính timeOffset nhưng tôi không thể thấy hiệu ứng. Thử tiếp theo của tôi là sử dụng GCD để trì hoãn nhưng nó cảm thấy như quá mức cần thiết.Làm cách nào để trì hoãn CABasicAnimation?

+0

Tôi chỉ sẽ sử dụng GCD. 'dispatch_after (popTime, dispatch_get_main_queue(),^(void) { <#code được thực thi trên hàng đợi chính sau khi trì hoãn #> }); ' – BooRanger

+1

@BooRanger điều gì sai với thuộc tính' beginTime'? –

+0

[Câu trả lời này] (http://stackoverflow.com/a/11625742/608157) nên trả lời câu hỏi của bạn –

Trả lời

77

Bạn không nên sử dụng thuộc tính [CAMediaTiming beginTime] (reference)?

Xem Tùy chỉnh thời gian của hoạt ảnh trong Core Animation Programming Guide.

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

Chỉ cần nhớ rằng đó là 'CACurrentMediaTime() + yourDelay' –

+1

Tôi không thể sử dụng điều này cho AVVideoCompositionCoreAnimationTool. Điều duy nhất hoạt động là AVCoreAnimationBeginTimeAtZero. Tôi muốn một chút chậm trễ cho hoạt ảnh của mình ... – Nil

+0

@grisleyB, Cùng một vấn đề mà tôi phải đối mặt. Bạn đã tìm thấy bất cứ điều gì ??? –

10

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

đâu dòng then chốt cho sự trì hoãn là:

scalePulseAnimation.beginTime = CACurrentMediaTime() + myDelay 
Các vấn đề liên quan