IOS項目之彈齣動畫二

來源:互聯網
上載者:User

標籤:

在IOS項目之彈齣動畫一中只是實現也功能,並沒有體現物件導向的思想 ,今天就試著把它封裝了一下,彈出視圖的內容可以根據自訂,此處只是用UIDatePicker來示範

我把它傳到了GitHub上   https://github.com/ywcui/YvanDatePicker.git

一、建立一個類YWDatePicker整合UIView

//  YvanDatePicker.h#import <UIKit/UIKit.h>typedef  void (^selectDate)(NSDate *date);@interface YvanDatePicker : UIView//單利+ (YvanDatePicker *)sharedManager;//block傳值擷取選擇時間@property(nonatomic,strong) selectDate selectDate;//時間選擇控制項 可設定屬性@property(nonatomic,strong) UIDatePicker *datePicker;//window全螢幕顯示-(void)showInWindow;// View中顯示-(void)showInView:(UIView*)view;//在父視圖view的相對位置為Frame-(void)showInView:(UIView*)view withFrame:(CGRect)frame;//消失視圖-(void)dismissView;@end
#define MAXHEIGHT [UIScreen mainScreen].bounds.size.height#import "YvanDatePicker.h"@interface YvanDatePicker ()@end@implementation YvanDatePicker+ (YvanDatePicker *)sharedManager{    static YvanDatePicker *sharedAccountManagerInstance = nil;    static dispatch_once_t predicate;    dispatch_once(&predicate, ^{        sharedAccountManagerInstance = [[self alloc] init];        sharedAccountManagerInstance.backgroundColor=[UIColor colorWithWhite:0.5 alpha:0.4];    });    return sharedAccountManagerInstance;}-(void)showInWindow{    [self showInView:[UIApplication sharedApplication].keyWindow];}-(void)showInView:(UIView*)view{    [self showInView:view withFrame:CGRectMake(0, 0, view.frame.size.width, view.frame.size.height)];    }//frame相對於父視圖的位置-(void)showInView:(UIView*)view withFrame:(CGRect)frame;{    //在此可以自訂視圖    self.frame=CGRectMake(frame.origin.x, MAXHEIGHT, frame.size.width, frame.size.height);    [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{        self.frame=frame;    } completion:nil];    UITapGestureRecognizer *tapGesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(dismissView)];    [self addGestureRecognizer:tapGesture];    if (_datePicker==nil) {        _datePicker=[[UIDatePicker alloc]init];        _datePicker.locale=[[NSLocale alloc ]initWithLocaleIdentifier:@"zh_Hans_CN"];        _datePicker.datePickerMode=UIDatePickerModeDate;        _datePicker.timeZone=[NSTimeZone defaultTimeZone];    }    _datePicker.frame=CGRectMake(0, frame.size.height-216, 0, 0);    [self addSubview:_datePicker];        [view addSubview:self];}-(void)dismissView{    _selectDate(_datePicker.date);    [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{        self.frame=CGRectMake(0, MAXHEIGHT, self.frame.size.width , self.frame.size.height);    } completion:^(BOOL finished) {        [self removeFromSuperview];    }];    }@end

二、調用

////  ViewController.m//  YvanDatePicker////  Created by City--Online on 15/6/18.//  Copyright (c) 2015年 YvanCui. All rights reserved.//#import "ViewController.h"#import "YvanDatePicker.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    self.navigationItem.rightBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"彈出" style:UIBarButtonItemStyleDone target:self action:@selector(leftClick)];}-(void)leftClick{    YvanDatePicker *picker=[YvanDatePicker sharedManager];    picker.selectDate=^(NSDate *date)    {        NSLog(@"%@",date);    };//    //1.設定在父視圖的Frame//    CGRect frame=CGRectMake(10, self.view.bounds.size.height-260, self.view.bounds.size.width-20, 260);//    [picker showInView:self.view withFrame:frame];//    //    //2.Window顯示//    [picker showInWindow];//    //    //3.View全螢幕顯示//    [picker showInView:self.view];        //4.相對於Window的Frame    CGRect frame1=CGRectMake(0, [UIApplication sharedApplication].keyWindow.bounds.size.height-260, [UIApplication sharedApplication].keyWindow.bounds.size.width, 260);    [picker showInView:[UIApplication sharedApplication].keyWindow withFrame:frame1];       }- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end

三、顯示效果

這個還可以進一步最佳化可以加一個標記值可以防止連續點擊時一直彈出

#define MAXHEIGHT [UIScreen mainScreen].bounds.size.height#import "YvanDatePicker.h"@interface YvanDatePicker ()@property(nonatomic,assign) BOOL openFlag;@end@implementation YvanDatePicker+ (YvanDatePicker *)sharedManager{    static YvanDatePicker *sharedAccountManagerInstance = nil;    static dispatch_once_t predicate;    dispatch_once(&predicate, ^{        sharedAccountManagerInstance = [[self alloc] init];        sharedAccountManagerInstance.backgroundColor=[UIColor colorWithWhite:0.5 alpha:0.4];    });    return sharedAccountManagerInstance;}-(void)showInWindow{    [self showInView:[UIApplication sharedApplication].keyWindow];}-(void)showInView:(UIView*)view{    [self showInView:view withFrame:CGRectMake(0, 0, view.frame.size.width, view.frame.size.height)];    }//frame相對於父視圖的位置-(void)showInView:(UIView*)view withFrame:(CGRect)frame;{    if (_openFlag) {        [self dismissView];        return;    }        _openFlag=true;    self.frame=CGRectMake(frame.origin.x, -frame.size.height, frame.size.width, frame.size.height);    [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{        self.frame=CGRectMake(frame.origin.x, 104, frame.size.width, frame.size.height);;    } completion:nil];    [UIView animateWithDuration:0.3 delay:0.4 options:UIViewAnimationOptionCurveEaseOut animations:^{        self.frame=CGRectMake(frame.origin.x, 0, frame.size.width, frame.size.height);;    } completion:nil];    UITapGestureRecognizer *tapGesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(dismissView)];    [self addGestureRecognizer:tapGesture];    if (_datePicker==nil) {        _datePicker=[[UIDatePicker alloc]init];        _datePicker.locale=[[NSLocale alloc ]initWithLocaleIdentifier:@"zh_Hans_CN"];        _datePicker.datePickerMode=UIDatePickerModeDate;        _datePicker.timeZone=[NSTimeZone defaultTimeZone];    }    _datePicker.frame=CGRectMake(0, frame.size.height-216, 0, 0);    [self addSubview:_datePicker];        [view addSubview:self];}-(void)dismissView{    _openFlag=false;    _selectDate(_datePicker.date);    [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{        self.frame=CGRectMake(0,- self.frame.size.height, self.frame.size.width , self.frame.size.height);    } completion:^(BOOL finished) {        [self removeFromSuperview];    }];    }@end
 YvanDatePicker *picker=[YvanDatePicker sharedManager];    picker.selectDate=^(NSDate *date)    {        NSLog(@"%@",date);    };//    //1.設定在父視圖的Frame    CGRect frame=CGRectMake(0, 0, self.view.bounds.size.width, 260);    [picker showInView:self.view withFrame:frame];

回彈效果

 

IOS項目之彈齣動畫二

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.