抽屜效果IOS---仿網易用戶端的---初步完成封裝---簡單易用---IOS

來源:互聯網
上載者:User

這幾天閑著沒事,看了幾個抽屜效果,總覺得大都寫的有些複雜,便自己封裝了一個.主要為了自己專案服務,主要按照網易用戶端的樣式封裝,未提供更改中間視圖frame的介面,有興趣的話可以自己試著添加一個frame介面即可. (在ARC開啟的情況下封裝的)

核心功能:點擊左抽屜中的cell,關閉抽屜,可以推出新的中間控制器,或者原本存在的控制器.

抽屜開啟的情況下,點擊中間視圖,收回抽屜.

注意事項:中間視圖必須是navigationcontroller,並自己在中間控制器類中重寫item的左右button.

必須引入我的類目.最好放進pch檔案中,

這是初始版本,肯定還有不盡完善的地方,不喜勿噴.動畫等功能還未加入,主要完成抽屜的核心功能.

-------------------------------------------------------轉載請註明出處--------------------------------------------------------

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

--------------------範例程式碼下載http://download.csdn.net/detail/u013082522/6952231--------------

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;@property(nonatomic,retain)UISwipeGestureRecognizer *swipeLeft;@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:leftViewController];                //將右控制器添加為子控制器,這樣右邊控制器才可以找到self        [self addChildViewController:rightViewController];    }        return self;}//重寫設定中間視圖的set方法- (void)setCenterDrawerVC:(UIViewController *)CenterDrawerVC{    if (_CenterDrawerVC == nil) {                _CenterDrawerVC = CenterDrawerVC;        [self.view addSubview:_CenterDrawerVC.view];        [self addChildViewController:_CenterDrawerVC];        NSLog(@"不存在");            }else{                UIViewController *oldVC = _CenterDrawerVC;        _CenterDrawerVC = CenterDrawerVC;        [self.view addSubview:_CenterDrawerVC.view];        [oldVC removeFromParentViewController];        [oldVC.view removeFromSuperview];        [self addChildViewController:_CenterDrawerVC];    }    }- (void)addSwipeGeustureToLeft{    if (_LeftDrawerIsShow) {        self.swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(tapLeftDrawerButton)];        [_swipeLeft setDirection:UISwipeGestureRecognizerDirectionDown];        [_CenterDrawerVC.view addGestureRecognizer:self.swipeLeft];            }else{        if (self.swipeLeft != nil) {            [_CenterDrawerVC.view removeGestureRecognizer:_swipeLeft];        }    }}#pragma 點選手勢方法//當左抽屜處於開啟狀態的時候,在中間視圖上添加單擊手勢,點擊收回左抽屜- (void)AddTapGestureToLeft{    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)AddTapGestureToRight{    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 AddTapGestureToLeft];        [self addSwipeGeustureToLeft];            }else{                _CenterDrawerVC.view.frame = CGRectMake(250, 50, 320, 400);                _IsLeft = NO;                _LeftDrawerIsShow = YES;                [self AddTapGestureToLeft];        [self addSwipeGeustureToLeft];    }    }//右邊點擊事件- (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 AddTapGestureToRight];            }else{                _CenterDrawerVC.view.frame = CGRectMake(-250, 60, 320, 400);                _RightDrawerIsShow = YES;                _IsRight = NO;                [self AddTapGestureToRight];    }}#pragma 關閉左右抽屜的快捷方法//關閉左抽屜,方便調用- (void)closeLeftDrawer{    _CenterDrawerVC.view.frame = CGRectMake(0, 0, 320, 568);        _IsLeft = YES;        _LeftDrawerIsShow = NO;        [self AddTapGestureToLeft];    }//關閉右抽屜,方便調用- (void)closeRightDrawer{    _CenterDrawerVC.view.frame = CGRectMake(0, 0, 320, 568);        _IsRight = YES;        _RightDrawerIsShow = NO;        [self AddTapGestureToRight];    }- (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


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.