Điều này thực sự đơn giản hơn rất nhiều, sau đó bạn sẽ suy nghĩ và sử dụng hoạt ảnh đầu tiên với tốc độ "không" (bị tạm dừng). Bây giờ với hoạt ảnh tạm dừng được thêm vào lớp, bạn có thể thay đổi thời gian bù đắp để chuyển đến một thời điểm cụ thể trong hoạt ảnh.
Nếu bạn không có ý định tự chạy hình động (nghĩa là chỉ điều khiển bằng tay) Tôi khuyên bạn nên thay đổi thời lượng của hoạt ảnh thành 1. Điều này có nghĩa là bạn thay đổi khoảng thời gian từ 0 đến 1 khi di chuyển từ 0% đến 100%. Nếu thời gian của bạn là 0,3 (như trong ví dụ của bạn) thì bạn sẽ đặt thời gian bù đắp cho một giá trị từ 0 đến 0,3.
Triển khai
Như tôi đã nói ở trên, có rất ít mã liên quan đến mẹo nhỏ này.
- (Tùy chọn) Đặt thời gian đến 1.0
- Đặt
speed
của lớp (có họ phù hợp với CAMediaTiming
) hoặc các hình ảnh động để 0.0
- Trong cử chỉ kéo hoặc trượt (như trong ví dụ của tôi) đặt
timeOffset
của lớp hoặc hoạt ảnh (tùy thuộc vào những gì bạn đã làm trong bước 2).
Đây là cách tôi cấu hình hoạt hình + hình dạng của tôi lớp
CABasicAnimation *morph = [CABasicAnimation animationWithKeyPath:@"path"];
morph.duration = 1.; // Step 1
morph.fromValue = (__bridge id)fromPath;
morph.toValue = (__bridge id)toPath;
[self.shapeLayer addAnimation:morph forKey:@"morph shape back and forth"];
self.shapeLayer.speed = 0.0; // Step 2
Và hành động trượt:
- (IBAction)sliderChanged:(UISlider *)sender {
self.shapeLayer.timeOffset = sender.value; // Step 3
}
Bạn có thể xem kết quả cuối cùng bên dưới. Chúc mừng mã hóa!
Nguồn
2013-09-08 12:47:09
Trong trường hợp không tầm thường, được xây dựng trong morphing các đường dẫn trở nên vô dụng khá nhanh chóng. Xem vấn đề và giải thích được mô tả ở đây: http://stackoverflow.com/a/17864445/438982 – ipmcc
Đó là sự thật, nhưng trong trường hợp của tôi hình thái có vẻ tốt ... – tarmes