代码之家  ›  专栏  ›  技术社区  ›  Skyler

如何在iPhone上进行多个动画?

  •  1
  • Skyler  · 技术社区  · 17 年前

    我想为一个游戏制作多个片段的动画,我想让这些片段向不同的方向移动,这样我当前制作整个视图动画的方法将不再有效。

    我想知道什么是同时设置多个项目动画的最佳实践。(注意,我是在二维渲染,所以我目前对三维解不感兴趣。)

    谢谢!

    2 回复  |  直到 16 年前
        1
  •  8
  •   Brad Larson    17 年前

    一次制作多个二维对象的动画相对容易。有两种方法可以实现这一点:对ui视图进行动画制作或对calayers进行动画制作。在我的测试中,我发现在对这两个对象进行动画制作时,性能几乎没有什么不同(在iPhone上,这两个对象似乎都支持大约50个对象同时以60 fps的速度移动)。

    要协调一系列ui视图的动画,您需要在begin/commit动画块中包装对视图几何图形的任何更改:

    [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];
    

    这将使两个或多个视图在动画持续时间内以直线运动到其新位置in seconds秒。如果希望视图彼此独立移动,请为每个视图创建单独的动画块。

    为了更好地控制动画,或者创建跨平台的Mac/iPhone用户界面代码,您可能希望使用核心动画日历。默认情况下,通过设置

    layer.position = CGPointMake(newX, newY);
    

    您的层将自动动画到新位置。请注意,默认情况下,层的位置相对于其中心,可以通过将其AnchorPoint属性设置为0,0将其更改为正常原点位置。

    可以使用catTransaction协调层动画:

    [CATransaction begin];
    [CATransaction setValue:[NSNumber numberWithFloat:ANIMATIONDURATIONINSECONDS] forKey:kCATransactionAnimationDuration];      
    layer1.position = CGPointMake(newX1, newY1);
    layer2.position = CGPointMake(newX2, newY2);
    [CATransaction commit];
    

    对于更高级的动画,您可以创建cabasicanimation和cakeyframeanimation,并将它们应用到您的层,以沿具有特定定时和加速/减速的复杂路径移动它们。

        2
  •  0
  •   Wim Haanstra    17 年前

    你看过Cocos2d iPhone项目吗?

    我发现它很容易使用,需要你做很多工作。

    Cocos2D iPhone

    它还可以做很多动画,你可以创建动画序列,你可以把它们联系在一起。

    推荐文章