您的位置:首页 > 其它

addChildViewController 的使用

2017-09-15 00:00 218 查看
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:

http://www.jianshu.com/p/91e0d6554254

http://www.jianshu.com/p/032e4bbcf822
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: