Just add the view somewhere outside the visible frame of the super view (the view you are animating on top of), then change it's position using an animation block. It will slide up.
- (void)addView
{
// Obviously this won't compile with cut&paste... you have
// to supply the actual views.
UIView* myControlView = // assume this exists somewhere
UIView* myMainView = // assume this exists too
myControlView.frame = CGRectMake(0, 480, 320, 100); // use real numbers
[myMainView addSubview:myControlView];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
myControlView.frame = CGRectMake(0, 380, 320, 100);
[UIView commitAnimations];
}
There are a number of other ways to do this as well. For instance, you can have a view set exactly where you want it and then translate it off screen to "hide" it. When you want it to come back, transform it again with an affine transform inside an animation block and it will slide back up. That way works a little better with views that are pre-laid out, like using Interface Builder and such where you don't necessarily know what the positions of the frame are, or they're subject to change in other code.