自定义一个抽屉小框架

抽屉小框架

抽屉的主要原理为有两个view的frame改变从而显示出抽屉效果

我简单的封装了一个抽屉小框架,希望能对大家有写帮助

-WQDrawerController.h

//
//  WQDrawerController.h
//  WQDrawer
//
//  Created by li on 16/11/26.
//  Copyright © 2016年 李文强. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface WQDrawerController : UIViewController
//向外界提供接口,便于外界访问

-(void)mainVC:(UIViewController*)mainVC leftVc:(UIViewController*)leftVc;
@end

-WQDrawerController.m

//
//  WQDrawerController.m
//  WQDrawer
//
//  Created by li on 16/11/26.
//  Copyright © 2016年 李文强. All rights reserved.
//

#import "WQDrawerController.h"

@interface WQDrawerController ()
@property(strong,nonatomic)UIViewController*mainVc;
@property(strong,nonatomic)UIViewController*leftVc;
@property(strong,nonatomic)UIButton*coverbtn;
@end

@implementation WQDrawerController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor=[UIColor redColor];
    [self addGesture];


}


//设置主控制器和左边控制器
-(void)mainVC:(UIViewController *)mainVC leftVc:(UIViewController *)leftVc{
    self.leftVc=leftVc;
    [self addChildViewController:self.leftVc];
    self.leftVc.view.frame=self.view.frame;
    [self.view addSubview:self.leftVc.view];


    self.mainVc=mainVC;
    [self addChildViewController:self.mainVc];
    self.mainVc.view.frame=self.view.frame;
    [self.view addSubview:self.mainVc.view];



}

//打开抽屉
-(void)openDrawer{

    [UIView animateWithDuration:0.25 animations:^{
        self.mainVc.view.frame=CGRectMake([UIScreen mainScreen].bounds.size.width*0.75, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);
    }];
    [self addcover];

}


//关闭抽屉
-(void)closeDrawer{
    [UIView animateWithDuration:0.25 animations:^{
        self.mainVc.view.frame=CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);
    }];

    [self.coverbtn removeFromSuperview];
    self.coverbtn=nil;
}

//添加手势
-(void)addGesture{
    UIPanGestureRecognizer*pan=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(GestureEvent:)];
    [self.view addGestureRecognizer:pan];

}

//手势的响应事件
-(void)GestureEvent:(UIPanGestureRecognizer*)pan{
    if (pan.state==UIGestureRecognizerStateEnded||pan.state==UIGestureRecognizerStateCancelled) {
        if (self.mainVc.view.frame.origin.x>=[UIScreen mainScreen].bounds.size.width*0.5) {
            [self openDrawer];
        }else{
            [self closeDrawer];
        }
    }else if(pan.state==UIGestureRecognizerStateChanged){
        CGFloat offset=[pan translationInView:pan.view].x;
        if (offset>0) {
            self.mainVc.view.frame=CGRectMake(offset, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);
        }

    }

}

//添加遮盖
-(void)addcover{

    self.coverbtn=[[UIButton alloc]init];
    [self.coverbtn addTarget:self action:@selector(closeDrawer) forControlEvents:UIControlEventTouchDown];
    self.coverbtn.frame=self.mainVc.view.bounds;
    [self.mainVc.view addSubview:self.coverbtn];
}

@end

注:在iOS中如果两个View为父子控件,那么这两个view所在的controller也必须为父子控制器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值