IOS抽屜效果的實現(xiàn)

抽屜視圖實現(xiàn)的思路

UIViewController 控制著一個 左邊的抽屜視圖(LeftViewController)
同時控制著一個UITabBarController.然后tabBarController就按我們平時做項目那樣做一個三級控制器披泪。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    
    //創(chuàng)建窗口
    _window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    //設置背景顏色
    _window.backgroundColor = [UIColor whiteColor];
    //顯示window
    [_window makeKeyAndVisible];
    
    BaseTabBarController *baseVC = [[BaseTabBarController alloc]init];
    
    LeftViewController *leftVC = [[LeftViewController alloc]init];

    
    
    RootViewController *rootVC = [[RootViewController alloc] initWithLeftViewController:leftVC withCenterViewController:baseVC];
    
    

    _window.rootViewController = rootVC;
    
    
    return YES;
}

//這里指的是上面那個控制所有控制器的根控制器(我創(chuàng)建的是叫做RootViewController的類)
RootViewController.h文件
#import <UIKit/UIKit.h>

@interface RootViewController : UIViewController


- (instancetype)initWithLeftViewController:(UIViewController *)leftVC
                  withCenterViewController:(UIViewController *)centerVC;



- (void)closeLeftViewController:(UIViewController *)parentViewController;

@end

RootViewController.m文件
- (instancetype)initWithLeftViewController:(UIViewController *)leftVC
                  withCenterViewController:(UIViewController *)centerVC {

    self = [super init];
   
    if (self != nil) {

        //添加子視圖和子控制器
        [self addChildViewController:leftVC];
        leftVC.view.frame = CGRectMake(-200, 0, 200, self.view.bounds.size.height);
        [self.view addSubview:leftVC.view];
        
        [self addChildViewController:centerVC];
        [self.view addSubview:centerVC.view];
        
        
      
        
    
        UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)];
        [self.view addGestureRecognizer:pan];

    }
    
    return self;
}


#pragma  mark - 手勢
- (void)panAction:(UIPanGestureRecognizer *)pan {
    
    /*
     * 1.讓抽屜視圖的平移量跟隨著手指的x軸偏移量相同
     * 2.判斷條件:
     *  ①是否在滑動的過程中大于等于(>=)某個臨界值俯渤,這里我的臨界值是200(左邊抽屜視圖的寬度)
     *   1>條件成立這個臨界值就讓當前的偏移量 = 這個臨界值
     *  ②再次判斷手勢的狀態(tài)是否結束,并且手指的偏移量是否小于這個臨界值200
     *   1>條件成立就讓當前手指的x軸偏移量為0
     *  
     *  整個過程就是滑動量到達200時才顯示抽屜視圖沒達到200就不顯示
     */
    CGPoint p =  [pan translationInView:pan.view];
    
        
    [UIView animateWithDuration:0.3 animations:^{
            
    for (UIView *subView in self.view.subviews) {
        
        CGPoint p1 = p;
        
        if (p1.x >= 200) {
            
            p1.x = 200;
       
        }else if (pan.state == UIGestureRecognizerStateEnded && p1.x < 200){
           
           p1.x = 0;
        
       }
        
        subView.transform = CGAffineTransformMakeTranslation(p1.x, 0);
        
        
  }
    }];

    
        
        
    
    
    
    
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    
    [UIView animateWithDuration:0.3 animations:^{
    
     
        for (UIView *subView in self.view.subviews) {
            
            subView.transform = CGAffineTransformIdentity;
        
        }
   }];

}
#pragma  mark - 關閉左邊的抽屜

- (void)closeLeftViewController:(UIViewController *)parentViewController {

    [UIView animateWithDuration:0.3 animations:^{
        
        
        for (UIView *subView in parentViewController.view.subviews) {
            
            subView.transform = CGAffineTransformIdentity;
            
        }
    }];

    
LeftViewController.m文件

- (void)viewDidLoad {
    [super viewDidLoad];
    
    
    
    
    self.view.backgroundColor = [UIColor orangeColor];
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    [btn setTitle:@"點擊" forState:UIControlStateNormal];
    btn.frame = CGRectMake(0, 100, 70, 70);
    btn.backgroundColor = [UIColor redColor];
    [btn addTarget:self action:@selector(btnAc:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
    
  


}


- (void)btnAc:(UIButton *)btn {
    
    

    RootViewController *root = [[RootViewController alloc]init];

    TestViewController *test = [[TestViewController alloc]init];
    
   //先關閉左邊的抽屜視圖
    [root closeLeftViewController:self.parentViewController];
    
    //要先pop到當前的根視圖
    [self.nv popToRootViewControllerAnimated:NO];
    //push到你想要的控制器
    [self.nv pushViewController:test animated:NO];
    

    
}




最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末颁股,一起剝皮案震驚了整個濱河市实蔽,隨后出現(xiàn)的幾起案子愤炸,更是在濱河造成了極大的恐慌剃法,老刑警劉巖喻杈,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異苍苞,居然都是意外死亡固翰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門羹呵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骂际,“玉大人,你說我怎么就攤上這事冈欢∏嘎粒” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵凑耻,是天一觀的道長太示。 經(jīng)常有香客問我,道長香浩,這世上最難降的妖魔是什么类缤? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮弃衍,結果婚禮上,老公的妹妹穿的比我還像新娘坚俗。我一直安慰自己镜盯,他們只是感情好,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布猖败。 她就那樣靜靜地躺著速缆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恩闻。 梳的紋絲不亂的頭發(fā)上艺糜,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音,去河邊找鬼破停。 笑死翅楼,一個胖子當著我的面吹牛,可吹牛的內容都是我干的真慢。 我是一名探鬼主播毅臊,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼黑界!你這毒婦竟也來了管嬉?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤朗鸠,失蹤者是張志新(化名)和其女友劉穎蚯撩,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烛占,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡胎挎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扰楼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呀癣。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖弦赖,靈堂內的尸體忽然破棺而出项栏,到底是詐尸還是另有隱情,我是刑警寧澤蹬竖,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布沼沈,位于F島的核電站,受9級特大地震影響币厕,放射性物質發(fā)生泄漏列另。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一旦装、第九天 我趴在偏房一處隱蔽的房頂上張望页衙。 院中可真熱鬧,春花似錦阴绢、人聲如沸店乐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽眨八。三九已至,卻和暖如春左电,著一層夾襖步出監(jiān)牢的瞬間廉侧,已是汗流浹背页响。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留段誊,地道東北人闰蚕。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像枕扫,于是被迫代替她去往敵國和親陪腌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容

  • 前言的前言 唐巧前輩在微信公眾號「iOSDevTips」以及其博客上推送了我的文章后烟瞧,我的 Github 各項指標...
    VincentHK閱讀 5,379評論 3 44
  • 翻譯自“View Controller Programming Guide for iOS”诗鸭。 1 定義子類 使用...
    lakerszhy閱讀 2,412評論 0 5
  • 1.突然覺得成熟的標志就是,自己能強忍著膈應去辦一件件未必是自己喜歡的事参滴。說白了成熟就是妥協(xié)强岸,就是接納。 2.身為...
    老張的雜貨鋪閱讀 174評論 0 0
  • 1 偶爾看了一部科幻電影砾赔,《分歧者》蝌箍。故事講述在芝加哥城,人們按照性格特征暴心,分成不同派別妓盲,無私派,無畏派专普,博學派等...
    任風南閱讀 562評論 1 3
  • 鬧了辦天悯衬,后買的2只雞都不低估了,我也就停止定投了檀夹!2017筋粗、2、21確認定投110031炸渡,成交凈值1.1014元娜亿。
    ChanceLi閱讀 155評論 0 0