第一個項目之八--手勢和動畫2

一看副標(biāo)題,是不是很熟悉。恩,居然還是手勢和動畫!不過這次是第二節(jié)了!內(nèi)容跟之前的是不同的喔。
哪里不同?上次是點擊之后播放動畫,這次嘛,是拖動的時候播放動畫。雖然沒太大不同,但是在嘗試的時候也是花了不少時間啊。
項目需要,要做一個類似iOS自帶的控制中心的彈出式抽屜,因為為了貫徹盡量自己寫自己研究,所以嘛,這次也是直接寫好就放上來了,也沒太多要點,就是在拖動的時候?qū)κ謩莸呐袛?,手勢所在點的處理。

DrawerCenterViewController.h
#import <UIKit/UIKit.h>

@interface DrawCenterViewController : UIViewController

@end

頭文件一如既往空空如也……

DrawerCenterViewController.m
#import "DrawCenterViewController.h"
#import "DrawerViewController.h"

@interface DrawCenterViewController ()

@property (nonatomic, strong) DrawerViewController *instance_drawerView;
@property (nonatomic, strong) UIView *view_cover;

@end

@implementation DrawCenterViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    [self initDrawerView];
}

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

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

- (void)initGesture{
    UIPanGestureRecognizer *gesture_pan=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(showDrawer:)];
    [self.view addGestureRecognizer:gesture_pan];
    
    UITapGestureRecognizer *gesture_tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(dismissDrawer:)];
    [self.view_cover addGestureRecognizer:gesture_tap];
}

- (void)initDrawerView{
    self.view_cover = [[UIView alloc]init];
    self.view_cover.backgroundColor = [UIColor blackColor];
    [self.view_cover setAlpha:0];
    [self.view_cover setFrame:self.view.bounds];
    [self.view addSubview:self.view_cover];
    
    self.instance_drawerView = [[DrawerViewController alloc]init];
    [self.instance_drawerView.view setFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.size.height, self.view.frame.size.width, 250)];
    self.instance_drawerView.view.backgroundColor = [UIColor lightGrayColor];
    [self.view addSubview:self.instance_drawerView.view];
    
    [self initGesture];
}

- (void)showDrawer:(UIPanGestureRecognizer *)gesture{
    CGPoint translation;
    if (gesture.state == UIGestureRecognizerStateChanged) {
        translation = [gesture translationInView:self.view];
        if (translation.y < -15 && translation.y > -self.instance_drawerView.view.frame.size.height) {
            [UIView animateWithDuration:0.15f animations:^{
                self.instance_drawerView.view.transform = CGAffineTransformMakeTranslation(self.instance_drawerView.view.frame.origin.x, translation.y);
                [self.view_cover setAlpha:0.2];
           
            }];
        }
    }else if(gesture.state==UIGestureRecognizerStateEnded){
        if(self.instance_drawerView.view.frame.origin.y <= (self.view.frame.size.height - (self.instance_drawerView.view.frame.size.height / 2))){
            [UIView animateWithDuration:0.5f animations:^{
                self.instance_drawerView.view.transform = CGAffineTransformMakeTranslation(self.instance_drawerView.view.frame.origin.x, -self.instance_drawerView.view.frame.size.height);
            }];
        } else {
            [UIView animateWithDuration:0.5f animations:^{
                self.instance_drawerView.view.transform = CGAffineTransformMakeTranslation(self.instance_drawerView.view.frame.origin.x, self.view.frame.size.height - self.instance_drawerView.view.frame.origin.y);
                [self.view_cover setAlpha:0];
            }];
        }
    }
}


- (void)dismissDrawer:(UITapGestureRecognizer *)gesture{
    [UIView animateWithDuration:0.35f animations:^{
        self.instance_drawerView.view.transform = CGAffineTransformMakeTranslation(self.instance_drawerView.view.frame.origin.x, self.view.frame.size.height - self.instance_drawerView.view.frame.origin.y);
        [self.view_cover setAlpha:0];
    }];
}

@end

至于里面那個DrawerViewController是為了以后拓展用的,恩。
然后就是效果圖:

DrawerCenter.gif

其實還是很簡單的,而且效果也一般般~大牛請輕噴!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容