NSViewAnimation
lets you resize a window and cross-fade some views in one operation. (note I've had problems with the window size getting a couple of pixels off using this. Hopefully either I'm doing something dumb, or Apple fixes a bug). This code resizes the window, and changes the view that lives inside of a box. This is like how the Pages inspector works (except Pages doesn't do the gratuitous animation effect)NSRect newWindowFrame = ... the new window size; NSDictionary *windowResize; windowResize = [NSDictionary dictionaryWithObjectsAndKeys: window, NSViewAnimationTargetKey, [NSValue valueWithRect: newWindowFrame], NSViewAnimationEndFrameKey, nil]; NSDictionary *oldFadeOut = nil; if (oldView != nil) { oldFadeOut = [NSDictionary dictionaryWithObjectsAndKeys: oldView, NSViewAnimationTargetKey, NSViewAnimationFadeOutEffect, NSViewAnimationEffectKey, nil]; } NSDictionary *newFadeIn; newFadeIn = [NSDictionary dictionaryWithObjectsAndKeys: newView, NSViewAnimationTargetKey, NSViewAnimationFadeInEffect, NSViewAnimationEffectKey, nil]; NSArray *animations; animations = [NSArray arrayWithObjects: windowResize, newFadeIn, oldFadeOut, nil]; NSViewAnimation *animation; animation = [[NSViewAnimation alloc] initWithViewAnimations: animations]; [animation setAnimationBlockingMode: NSAnimationBlocking]; [animation setDuration: 0.5]; // or however long you want it for [animation startAnimation]; // because it's blocking, once it returns, we're done [animation release];