2013-02-01 45 views
6

Tôi có hình ảnh bóng mà tôi đang tạo hình động quanh một con đường. Hoạt ảnh được đặt lặp lại mãi mãi, nhưng tại sao có sự chậm trễ giữa các lần lặp lại?CAKeyFrameHãy trì hoãn sự chậm trễ trước khi lặp lại

Dưới đây là mã của tôi:

CGPathRef aPath; 
aPath = CGPathCreateWithEllipseInRect(CGRectMake(0, 0, SIZE, SIZE), NULL); 

[CATransaction begin]; 

arcAnimation = [CAKeyframeAnimation animationWithKeyPath: @"position"]; 
[arcAnimation setBeginTime:CACurrentMediaTime()]; 
[arcAnimation setDuration: 1.5]; 
[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]]; 
[arcAnimation setAutoreverses: NO]; 
[arcAnimation setRepeatCount:HUGE_VALF]; 
arcAnimation.removedOnCompletion = NO; 
arcAnimation.fillMode = kCAFillModeRemoved; 
[arcAnimation setPath: aPath]; 
[ball.layer addAnimation: arcAnimation forKey: @"position"]; 
[CATransaction commit]; 
CFRelease(aPath); 

Trả lời

9

Hãy thử điều này:

[animation setCalculationMode:kCAAnimationPaced] 
+0

Vâng, điều này hoạt động như một sự quyến rũ! Cảm ơn! –

+0

Đã dành một giờ để tìm hiểu điều này ... Tại sao điều đó không phải là mặc định ?! – cph2117

0

Bạn phải thay thế kCAFillModeRemoved với kCAFillModeForwards hoặc một số giá trị khác. Đọc tài liệu on why.

Ngoài ra:

Thay thế:

[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]] 

Với (tùy thuộc vào kết quả kiểm tra của bạn):

[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]] 

hoặc

[arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]] 
+0

Nirav, tôi chắc chắn không muốn để giảm bớt trong hoặc ra ngoài. Tôi muốn hình ảnh động chạy với tốc độ không đổi qua vòng tròn mà không tăng tốc hoặc giảm tốc độ. Tôi đã thử tất cả các chế độ điền khác nhau, không có bất kỳ hiệu ứng đáng chú ý nào trên hoạt ảnh. Hoạt ảnh vẫn tạm dừng trong giây lát trước khi bắt đầu lại. –

+0

Sau đó, tôi nghĩ rằng đó là cuộc gọi setBeginTime đang tạo ra điều này. Vì bạn thực hiện một cuộc gọi đến nó, phải mất một thời gian để đánh giá thứ hai nó sẽ bắt đầu, mà tài khoản cho sự chậm trễ. Thử xóa nó đi. –

+0

Tôi đã xóa nó. Vẫn cư xử chính xác như nhau. –

1

Tôi không biết thực tế câu trả lời, nhưng bạn đang làm rất nhiều thứ không cần thiết ở đây và đề xuất của tôi là bạn bắt đầu bằng cách xóa nó. Không cần đến khối Giao dịch (begincommit). Không cần phải cho setBeginTime:. Chắc chắn không cần phải đặt removedOnCompletionfillMode vì đây không phải là hoạt ảnh được nhóm. Chỉ cần thêm hoạt hình vào lớp và đứng lại. Nó sẽ bắt đầu ngay lập tức và sẽ lặp lại mãi mãi, và mã của bạn sẽ đơn giản và tốt hơn.

Các vấn đề liên quan