首页 > 其他 > 详细

抽屉效果IOS---仿网易客户端的---初步完成封装---简单易用---IOS

时间:2014-02-24 01:16:16      阅读:365      评论:0      收藏:0      [点我收藏+]

这几天闲着没事,看了几个抽屉效果,总觉得大都写的有些复杂,便自己封装了一个.主要为了自己项目服务,主要按照网易客户端的样式封装,未提供更改中间视图frame的接口,有兴趣的话可以自己试着添加一个frame接口即可. (在ARC开启的情况下封装的)

核心功能:点击左抽屉中的cell,关闭抽屉,可以推出新的中间控制器,或者原本存在的控制器.

抽屉开启的情况下,点击中间视图,收回抽屉.

注意事项:中间视图必须是navigationcontroller,并自己在中间控制器类中重写item的左右button.

必须引入我的类目.最好放进pch文件中,

这是初始版本,肯定还有不尽完善的地方,不喜勿喷.动画等功能还未加入,主要完成抽屉的核心功能.

-------------------------------------------------------转载请注明出处--------------------------------------------------------

--------------------------------------------http://blog.csdn.net/u013082522------------------------------------------

--------------------示例代码下载http://download.csdn.net/detail/u013082522/6951193--------------

DrawerViewController.h

#import <UIKit/UIKit.h>
@protocol DrawerViewDelegate <NSObject>//协议,暂时未使用.

- (void)manageLeftDrawer;

- (void)manageRightDrawer;


@end

@interface DrawerViewController : UIViewController

@property(nonatomic,retain)UIViewController *LeftDrawerVC;

@property(nonatomic,retain)UIViewController *CenterDrawerVC;

@property(nonatomic,retain)UIViewController *RightDrawerVC;


//初始化方法

- (id)initWithLeftViewController:(UIViewController *)leftViewController centerViewController:(UIViewController *)centerViewController rightViewController:(UIViewController *)rightViewController;

//点击左右按钮

- (void)tapLeftDrawerButton;

- (void)tapRightDrawerButton;

//关闭左抽屉,方便调用

- (void)closeLeftDrawer;

//关闭右抽屉,方便调用

- (void)closeRightDrawer;



@end
DrawerViewController.m

#import "DrawerViewController.h"

@interface DrawerViewController ()

@property(nonatomic,assign)BOOL IsLeft;

@property(nonatomic,assign)BOOL IsRight;

@property(nonatomic,assign)BOOL LeftDrawerIsShow;

@property(nonatomic,assign)BOOL RightDrawerIsShow;

@property(nonatomic,retain)UITapGestureRecognizer *tapLeft;

@property(nonatomic,retain)UITapGestureRecognizer *tapRight;

@end

@implementation DrawerViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"11.jpg"]];
    }
    return self;
}

- (id)initWithLeftViewController:(UIViewController *)leftViewController centerViewController:(UIViewController *)centerViewController rightViewController:(UIViewController *)rightViewController
{
    self = [super init];
    
    if (self) {

        //加载左视图
        [self setLeftDrawerVC:leftViewController];
        [self.view addSubview:leftViewController.view];
        
        //加载右视图
        [self setRightDrawerVC:rightViewController];
        [self.view addSubview:rightViewController.view];
        
        //加载中间视图....中间视图一定要最后添加
        [self setCenterDrawerVC:centerViewController];
        [self.view addSubview:_CenterDrawerVC.view];
        
        //设置左右抽屉的任意一个布尔值
        self.IsLeft = YES;
        self.IsRight = YES;
        
        //给定状态初始值
        self.LeftDrawerIsShow = NO;
        self.RightDrawerIsShow = NO;
        
        //将中间控制器添加为子控制器,这样中间控制器才可以找到self
        [self addChildViewController:centerViewController];
        
        //将左控制器添加为子控制器,这样中间控制器才可以找到self
        [self addChildViewController:leftViewController];
        
        //将右控制器添加为子控制器,这样中间控制器才可以找到self
        [self addChildViewController:rightViewController];

    }
        return self;
}

#pragma 手势方法

//当左抽屉处于打开状态的时候,在中间视图上添加单击手势,点击收回左抽屉

- (void)AddTapGustureToLeft
{
    if (_LeftDrawerIsShow) {
        self.tapLeft = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapLeftDrawerButton)];
        
        [_CenterDrawerVC.view addGestureRecognizer:self.tapLeft];
    }else{
        if (self.tapLeft != nil) {
            [_CenterDrawerVC.view removeGestureRecognizer:_tapLeft];
        }
    }
    
}

//当右抽屉处于打开状态的时候,在中间视图上添加单击手势,点击收回右抽屉
- (void)AddTapGustureToRight
{
    if (_RightDrawerIsShow) {
        
        self.tapRight = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRightDrawerButton)];
        
        [_CenterDrawerVC.view addGestureRecognizer:self.tapRight];
        
    }else{
        if (self.tapRight != nil) {
            
            [_CenterDrawerVC.view removeGestureRecognizer:_tapRight];
        }
    }
    
}
#pragma 左右button的点击事件
//左边点击事件
-(void)tapLeftDrawerButton
{
    
    _RightDrawerVC.view.hidden = YES;
    _LeftDrawerVC.view.hidden = NO;
    
    if (!self.IsLeft) {
        
        _CenterDrawerVC.view.frame = CGRectMake(0, 0, 320, 568);
        
        _IsLeft = YES;
        
        _LeftDrawerIsShow = NO;
        
        [self AddTapGustureToLeft];
        
    }else{
        
        _CenterDrawerVC.view.frame = CGRectMake(250, 50, 320, 400);
        
        _IsLeft = NO;
        
        _LeftDrawerIsShow = YES;
        
        [self AddTapGustureToLeft];
    }
    
}

//右边点击事件
- (void)tapRightDrawerButton
{
    _LeftDrawerVC.view.hidden = YES;
    
    _RightDrawerVC.view.hidden = NO;
    
    if (!self.IsRight) {
        
        _CenterDrawerVC.view.frame = CGRectMake(0, 0, 320, 568);
        
        _IsRight = YES;
        
        _RightDrawerIsShow = NO;
        
        [self AddTapGustureToRight];
        
    }else{
        
        _CenterDrawerVC.view.frame = CGRectMake(-250, 60, 320, 400);
        
        _RightDrawerIsShow = YES;
        
        _IsRight = NO;
        
        [self AddTapGustureToRight];
    }
}
#pragma 关闭左右抽屉的快捷方法
//关闭左抽屉,方便调用

- (void)closeLeftDrawer
{
    _CenterDrawerVC.view.frame = CGRectMake(0, 0, 320, 568);
    
    _IsLeft = YES;
    
    _LeftDrawerIsShow = NO;
    
    [self AddTapGustureToLeft];
    
}

//关闭右抽屉,方便调用

- (void)closeRightDrawer
{
    _CenterDrawerVC.view.frame = CGRectMake(0, 0, 320, 568);
    
    _IsRight = YES;
    
    _RightDrawerIsShow = NO;
    
    [self AddTapGustureToRight];
    
}

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
类目的.h文件

#import <UIKit/UIKit.h>
#import "DrawerViewController.h"

@interface UIViewController (MyDrawer)

@property(nonatomic,strong,readonly)DrawerViewController *xukunDrawerViewController;

@end
类目的.m文件
@implementation UIViewController (MyDrawer)

-(DrawerViewController *)xukunDrawerViewController{
    
    if([self.parentViewController isKindOfClass:[DrawerViewController class]]){
        
        return (DrawerViewController*)self.parentViewController;
        
    }else if([self.parentViewController isKindOfClass:[UINavigationController class]] &&
            [self.parentViewController.parentViewController isKindOfClass:[DrawerViewController class]]){
        
        return (DrawerViewController*)[self.parentViewController parentViewController];
        
    }else{
        
        return nil;
    }
}
@end


抽屉效果IOS---仿网易客户端的---初步完成封装---简单易用---IOS

原文:http://blog.csdn.net/u013082522/article/details/19754913

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!