ChildViewSampleViewController.h
@interface ChildViewSampleViewController : UIViewController @end
ChildViewSampleViewController.m
@interface ChildViewSampleViewController ()@property (nonatomic) UIViewController *root;@property (nonatomic) UIViewController *overlap;@property (nonatomic) UIButton *button;@end @implementation ChildViewSampleViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self;} - (void)viewDidLoad{ [super viewDidLoad]; // Do any additional setup after loading the view. self.root = [[UIViewController alloc] init]; self.root.view.frame = CGRectMake(0, 60, 320, self.view.frame.size.height - 60); [self.root.view setBackgroundColor:[UIColor yellowColor]]; [self addChildViewController:self.root]; [self.root didMoveToParentViewController:self]; [self.view addSubview:self.root.view]; self.button = [[UIButton alloc] initWithFrame:CGRectMake(10, 10, 150, 50)]; [self.button setTitle:@"Show" forState:UIControlStateNormal]; [self.button addTarget:self action:@selector(pop:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:self.button];} #pragma mark - Event-(void)pop:(id)sender { if (self.overlap == nil ) { // Open(Show) self.overlap = [[UIViewController alloc] init]; [self.overlap.view setBackgroundColor:[UIColor redColor]]; [self addChildViewController:self.overlap]; // Start line CGRect startFrame = self.view.frame; startFrame.origin.y = startFrame.size.height; self.overlap.view.frame = startFrame; // Move half [self transitionFromViewController:self.root toViewController:self.overlap duration:1.0 options:0 animations:^{ CGRect original = self.root.view.frame; self.overlap.view.frame = CGRectMake(0, original.origin.y, original.size.width, original.size.height); } completion:^(BOOL finished) { [self.overlap didMoveToParentViewController:self]; [self.button setTitle:@"Hide" forState:UIControlStateNormal]; }]; } else { // Hide [self.overlap willMoveToParentViewController:nil]; // Good-bye [self transitionFromViewController:self.overlap toViewController:self.root duration:1.0 options:0 animations:^{ CGRect original = self.root.view.frame; self.overlap.view.frame = CGRectMake(0, original.size.height, original.size.width, original.size.height); [self.overlap.view.superview bringSubviewToFront:self.overlap.view]; } completion:^(BOOL finished) { [self.overlap removeFromParentViewController]; self.overlap = nil; [self.button setTitle:@"Show" forState:UIControlStateNormal]; }]; }} @end
ps: