Swift 中的低级动画
Posted
技术标签:
【中文标题】Swift 中的低级动画【英文标题】:low level animations in Swift 【发布时间】:2020-08-20 16:24:17 【问题描述】:我有 50 个多边形。 多边形的属性在“pol”数组上,它们的几何形状在“dat”上。 在大约 10 秒的时间里,所有多边形都会经历 2 种颜色插值,同时它们会在屏幕上移动。 每个多边形从一种特定颜色开始,然后在大约 2 秒内内插成一种新颜色。 在结束前 2 秒,每个多边形插入第三种颜色
这是 Matlab 代码,我想用 swift 编写它。 我没有快速的经验,所以我必须学习动画。 我不希望您提供代码。 我想知道这是否可能,尤其是我暂停执行的部分。 如果你能给我一些参考资料甚至关键词来搜索它,也会有很大帮助。 谢谢
% Array with the geometry of the polygons
dat=zeros(10000,2);
% Array with the list of view updates
vlist=zeros(100,5);
% vlist(-,1) Graphics handle of the polygon
% vlist(-,2) Type of update, 1 geometry, 2 color
% vlist(-,3:5) Properties of update, either entries on dat or rgb color
% pol is an array with 50 rows and 18 columns
% There is a total of 50 polygons
% pol(-,1) Graphics handle of the polygon
% pol(-,2:3) Coordinates of the polygon on dat array
% pol(-,4:5) Motion animation, start and final step
% pol(-,6:7) Color interpolation 1, start and final step
% pol(-,8:9) Color interpolation 2, start and final step
% pol(-,10:12) Start rgb color of interpolation 1
% pol(-,13:15) Final rgb color of interpolation 1, also start of 2
% pol(-,16:18) Final rgb color of interpolation 2
t_tot=10; % Total time of the animation is seconds
fps=30; % Frames per second
dt=1/fps; % Time step in seconds
s_final=t_tot * fps; % Final step of the animation
for i=1:s_final
% Counter of updates to the polygons, either geometry or color
iv=0;
% Get the time at the start of the i step
time1=tic;
for j=1:50
% Update the geometry of the j polygon
if i>=pol(j,4) && i<=pol(j,5)
% Do some geometry calculations, translations,
% rotations, enlargements
% Add the geometry update to the update list
iv=iv+1; vlist(iv,1:5)=[pol(j,1), 1, pol(j,2:3), 0]
end
% Update the color of the j polygon, interpolation 1
if i>=pol(j,6) && i<=pol(j,7)
% Use the current step to interpolate the color
% Add the color update to the update list
iv=iv+1; vlist(iv,1:5)=[pol(j,1), 2, color]
end
% Update the color of the j polygon, interpolation 2
if i>=pol(j,8) && i<=pol(j,9)
% Use the current step to interpolate the color
% Add the color update to the update list
iv=iv+1; vlist(iv,1:5)=[pol(j,1), 2, color]
end
end
% Sent all updates to the view function
updateview(iv, vlist, dat)
% Get the time at the end of the i step
time2=toc;
% Calculate the remaining amount of time and pause execution
twait=dt-(time2-time1)
pause(twait)
end
【问题讨论】:
【参考方案1】:幸运的是,Apple 为管理 2D 甚至 3D 图形提供了即插即用的解决方案。我猜你的新朋友可能是“SpriteKit”,其中 2D 的东西,如移动精灵、制作粒子效果、调整大小和移动动画是基本部分。它已经包含了大量针对 ios / iPadOS 设备的后台优化。
Apple 解决方案的 3D 版本是 SceneKit。
您还可以使用 Metal 获得对 GPU 的“低级”访问权限。
https://developer.apple.com/spritekit/
https://developer.apple.com/documentation/scenekit/
https://developer.apple.com/metal/
您还可以查看一些第三方库,但我认为这些是在 iOS / iPadOS 上的方式。 (除了 Unity、Unreal 等引擎)
【讨论】:
以上是关于Swift 中的低级动画的主要内容,如果未能解决你的问题,请参考以下文章