Tôi đang tạo hoạt ảnh CALayer
dọc theo CGPath
(QuadCurve) khá độc đáo trong iOS. Nhưng tôi muốn sử dụng một chức năng nới lỏng thú vị hơn một vài chức năng được cung cấp bởi Apple (EaseIn / EaseOut, v.v.). Ví dụ, một chức năng trả lại hoặc đàn hồi.
Những điều này có thể thực hiện với MediaTimingFunction (bezier):
Nhưng tôi muốn tạo các hàm định thời phức tạp hơn. Vấn đề là thời gian phương tiện dường như yêu cầu một bezier khối không đủ mạnh để tạo ra những hiệu ứng này:
(nguồn: sparrow-framework.org )
Các đang tạo ra ở trên là đủ đơn giản trong các khuôn khổ khác, mà làm cho bực bội này rất. Lưu ý rằng các đường cong ánh xạ thời gian đầu vào với thời gian đầu ra (đường cong Tt) chứ không phải đường cong vị trí thời gian. Ví dụ, easyOutBounce (T) = t trả về một t mới . Sau đó, t đó được sử dụng để vẽ biểu đồ chuyển động (hoặc bất kỳ thuộc tính nào mà chúng ta nên tạo hiệu ứng).
Vì vậy, tôi muốn tạo một tùy chỉnh phức tạp CAMediaTimingFunction
nhưng tôi không biết làm thế nào để làm điều đó, hoặc nếu nó thậm chí có thể? Có bất kỳ lựa chọn thay thế nào không?
BIÊN TẬP:
Đây là một ví dụ cụ thể về các bước. Rất giáo dục :)
Tôi muốn tạo hoạt ảnh cho một đối tượng dọc theo một đường từ điểm a đến b , nhưng tôi muốn nó "bật" chuyển động của nó dọc theo đường bằng cách sử dụng đường cong easyOutBounce ở trên. Điều này có nghĩa là nó sẽ đi theo đường chính xác từ a đến b , nhưng sẽ tăng tốc và giảm tốc theo cách phức tạp hơn những gì có thể sử dụng CAMediaTimingFunction dựa trên bezier hiện tại.
Cho phép tạo đường đó bất kỳ chuyển động đường cong tùy ý nào được chỉ định với CGPath. Nó vẫn sẽ di chuyển dọc theo đường cong đó, nhưng nó sẽ tăng tốc và giảm tốc theo cùng một cách như trong ví dụ về đường thẳng.
Về lý thuyết, tôi nghĩ nó sẽ hoạt động như thế này:
Cho phép mô tả đường cong chuyển động như một hoạt ảnh khung hình bàn phím di chuyển (t) = p , trong đó t là thời gian [0..1], p là vị trí được tính tại thời điểm t . Vì vậy, di chuyển (0) trả lại vị trí ở đầu đường cong, di chuyển (0,5) chính xác giữa và di chuyển (1) ở cuối. Sử dụng hàm định thời time (T) = t để cung cấp giá trị t cho việc di chuyển sẽ mang lại cho tôi những gì tôi muốn. Đối với hiệu ứng nảy, hàm thời gian phải trả về cùng các giá trị t cho thời gian (0,8) và thời gian (0,8)(chỉ là một ví dụ). Chỉ cần thay thế chức năng định thời để có được hiệu ứng khác.
(Có, bạn có thể thực hiện điều chỉnh dòng bằng cách tạo và nối bốn đoạn thẳng qua lại, nhưng điều đó không cần thiết. Xét cho cùng, nó chỉ là một hàm tuyến tính đơn giản ánh xạ các giá trị thời gian đến các vị trí.)
Tôi hy vọng tôi có ý nghĩa ở đây.