我想为一个游戏制作动画片,我想让这些片段向不同的方向移动,这样我现在的动画整个视图的方法将不再适用.
我想知道一次动画多个项目的最佳做法是什么.(注意我在2d渲染所以我目前对3d解决方案不感兴趣.)
谢谢!
一次动画多个2-D对象相对容易.有两种方法可以解决它:动画UIViews或动画CALayers.在我的测试中,我发现在动画两者时性能上几乎没有差别(两者似乎都支持在iPhone上以60 FPS同时移动约50个物体).
要协调一系列UIViews的动画,您需要在开始/提交动画块中包含对视图几何的任何更改:
[UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:ANIMATIONDURATIONINSECONDS]; view1.frame = CGRectMake(newX1, newY1, view1Width, view1Height); view2.frame = CGRectMake(newX2, newY2, view2Width, view2Height); // Add other views here [UIView commitAnimations];
这将在ANIMATIONDURATIONINSECONDS秒的持续时间内将两个或多个视图的直线运动协调到新位置.如果希望视图彼此独立移动,请为每个视图创建单独的动画块.
要更好地控制动画或创建跨平台的Mac/iPhone UI代码,您可能希望使用Core Animation CALayers.CALayers默认设置动画,所以通过设置
layer.position = CGPointMake(newX, newY);
您的图层将自动设置为新位置的动画.请注意,默认情况下,图层的位置相对于其中心,您可以通过将其anchorPoint属性设置为0,0将其更改为正常原点位置.
您可以使用CATransaction协调图层动画:
[CATransaction begin]; [CATransaction setValue:[NSNumber numberWithFloat:ANIMATIONDURATIONINSECONDS] forKey:kCATransactionAnimationDuration]; layer1.position = CGPointMake(newX1, newY1); layer2.position = CGPointMake(newX2, newY2); [CATransaction commit];
对于更高级的动画,您可以创建CABasicAnimations和CAKeyframeAnimations并将其应用于图层,以便在具有特定时间和加速/减速的复杂路径上移动它们.