addChildViewController 的使用

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

转载于:https://my.oschina.net/jack088/blog/1537730

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值