It's relatively easy to animate multiple 2-D objects at once. There are two ways that you can go about it: animate UIViews or animate CALayers. In my testing, I've found little difference in performance when animating the two (both seem to support ~50 objects moving around at the same time at 60 FPS on the iPhone).
To coordinate the animations of a series of UIViews, you'll want to wrap any changes to the view geometry in a begin / commit animation block:
[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];
This will coordinate the motion of two or more views in a straight line to their new position over a duration of ANIMATIONDURATIONINSECONDS seconds. If you want the views to move independently of one another, create separate animation blocks for each of them.
For more control over your animations, or to create cross-platform Mac / iPhone UI code, you may wish to use Core Animation CALayers. CALayers animate by default, so by setting
layer.position = CGPointMake(newX, newY);
your layer will automatically animate to the new position. Note that by default the layer's position is relative to its center, you can change that to the normal origin position by setting its anchorPoint property to 0,0.
You can coordinate layer animations using a CATransaction:
[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:ANIMATIONDURATIONINSECONDS] forKey:kCATransactionAnimationDuration];
layer1.position = CGPointMake(newX1, newY1);
layer2.position = CGPointMake(newX2, newY2);
[CATransaction commit];
For more advanced animations, you can create CABasicAnimations and CAKeyframeAnimations and apply those to your layers to move them along complex paths with specific timing and acceleration / deceleration.