时间滚动轴的封装

1.TimePickView.h

#import <UIKit/UIKit.h>
@class TimePickView;
@protocol TimePickViewDelegate <NSObject>
- (void)datePickViewConfirm:(TimePickView*)datePickView;
@end;
@interface TimePickView : UIView
@property (weak, nonatomic) id<TimePickViewDelegate> delegate;
@property (weak, nonatomic) IBOutlet UIPickerView *pickerView;
@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
- (IBAction)cancelAction:(id)sender;
- (IBAction)confirmAction:(id)sender;
//获取选中的时间(字符串形式)
- (NSString*)getSelectTime;
//获取选中的时间(中文形式)
- (NSString*)getChinaSelectTime;
- (void)showView:(UIView*)superView;
@end
2.TimePickView.m

#import "TimePickView.h"
#import "Macro.h"
@interface TimePickView()<UIPickerViewDataSource,UIPickerViewDelegate>
{
    NSMutableArray *days;
    NSMutableArray *hours;
    NSMutableArray *minutes;
    UIView* bgView;
}
@end
@implementation TimePickView

- (void)awakeFromNib
{
    self.backgroundColor = RGB16(COLOR_BG_WHITE);
    self.frame = CGRectMake(0, SCREEN_HEIGHT-250, SCREEN_WIDTH, 250);
    bgView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
    bgView.backgroundColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.5];
    [bgView addSubview:self];
    
    [self initPickViewData];
    self.pickerView.delegate = self;
    self.pickerView.dataSource = self;
    [self setDefaultPickView];
}

- (IBAction)cancelAction:(id)sender {
    [self hideView];
}
- (IBAction)confirmAction:(id)sender {
    if(self.delegate){
        [self.delegate datePickViewConfirm:self];
    }
    [self hideView];
}
- (void)showView:(UIView*)superView{
    self.frame = CGRectMake(0, SCREEN_HEIGHT, SCREEN_WIDTH, 200);
    [bgView addSubview:self];
    [superView addSubview:bgView];
    [UIView animateWithDuration:0.3 animations:^{
        self.frame = CGRectMake(0, SCREEN_HEIGHT-250, SCREEN_WIDTH, 230);
    }];
}
- (void)hideView{
    [UIView animateWithDuration:0.3 animations:^{
        self.frame = CGRectMake(0, SCREEN_HEIGHT, SCREEN_WIDTH,200);
    } completion:^(BOOL finished) {
        [bgView removeFromSuperview];
    }];
}

#pragma mark pick view
- (void)initPickViewData{
    NSInteger  mouthDays =[self getMonthDays];
    NSDateComponents * com =[self getNowDateComponents];
    days = [[NSMutableArray alloc]init];
    for (NSInteger i = [com day]; i<=mouthDays; i++) {
        [days addObject:[NSString stringWithFormat:@"%ld月%ld日",[com month],i]];
    }
    for (NSInteger j =1 ; j<=31-[com day]; j++) {
        [days addObject:[NSString stringWithFormat:@"%ld月%ld日",[com month]+1,j]];
    }
    hours = [[NSMutableArray alloc]init];
    for (int i = 0; i<24; i++) {
        [hours addObject:[NSString stringWithFormat:@"%d时",i]];
    }
    minutes = [[NSMutableArray alloc]init];
    for (int i = 0; i<60; i++) {
        [minutes addObject:[NSString stringWithFormat:@"%d分",i]];
    }
}
- (void)setDefaultPickView{
    NSDateComponents* comps = [self getNowDateComponents];
    NSInteger dayRow = 0;
    NSInteger hourRow = [comps hour];
    NSInteger minuteRow = [comps minute];
    if(60 == minuteRow){
        hourRow += 1;
        minuteRow = 0;
        if(24 == hourRow){
            dayRow += 1;
            hourRow = 0;
        }
    }
    [self.pickerView selectRow:dayRow inComponent:0 animated:YES];
    [self.pickerView selectRow:hourRow inComponent:1 animated:YES];
    [self.pickerView selectRow:minuteRow inComponent:2 animated:YES];
    self.timeLabel.text = [self getSelectTime];
}

//获取当前月份的天数
- (NSInteger)getMonthDays{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSRange range = [calendar rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:[NSDate date]];
    NSUInteger numberOfDaysInMonth = range.length;
    return numberOfDaysInMonth;
}
//获取当前时间戳
- (NSDateComponents*)getNowDateComponents{
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    NSDate *now = [NSDate date];
    NSInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday |
    NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
    NSDateComponents *comps = [calendar components:unitFlags fromDate:now];
    return comps;
}

#pragma mark  --UIPickerViewDataSource,UIPickerViewDelegate
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 3;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    if(0 == component){
        return days.count;
    }
    else if(1 == component){
        return hours.count;
    }
    else{
        return minutes.count;
    }
}
- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    NSString* title;
    if(0 == component){
        title = days[row];
    }
    else if(1 == component){
        title = hours[row];
    }
    else{
        title = minutes[row];
    }
    NSAttributedString *attString = [[NSAttributedString alloc] initWithString:title attributes:@{NSForegroundColorAttributeName:RGB16(COLOR_FONT_BLACK)}];
    return attString;
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
    [self changePastTimeToDefault];
    self.timeLabel.text = [self getChinaSelectTime];
}
- (NSString*)getChinaSelectTime{
    //选择时间
    NSInteger dayRow = [self.pickerView selectedRowInComponent:0];
    NSInteger hourRow = [self.pickerView selectedRowInComponent:1];
    NSInteger minuteRow = [self.pickerView selectedRowInComponent:2];
    return [NSString stringWithFormat:@"%@%@%@",days[dayRow],hours[hourRow],minutes[minuteRow]];

}
- (NSString*)getSelectTime{
    //选择时间
    NSInteger dayRow = [self.pickerView selectedRowInComponent:0];
    NSInteger hourRow = [self.pickerView selectedRowInComponent:1];
    NSInteger minuteRow = [self.pickerView selectedRowInComponent:2];
    
    NSDateComponents* comps = [self getNowDateComponents];
    NSInteger secodes = ((dayRow * 24 + hourRow - comps.hour) * 60 + minuteRow- comps.minute) * 60;
    NSDate *date = [NSDate dateWithTimeInterval:secodes sinceDate:[NSDate date]];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm"];
    return [formatter stringFromDate:date];
}
- (void)changePastTimeToDefault{
    NSDateComponents* comps = [self getNowDateComponents];
    NSInteger hourCur = [comps hour];
    NSInteger minuteCur = [comps minute];
    //选择时间
    NSInteger dayRow = [self.pickerView selectedRowInComponent:0];
    NSInteger hourRow = [self.pickerView selectedRowInComponent:1];
    NSInteger minuteRow = [self.pickerView selectedRowInComponent:2];
    
    if (dayRow!=0) {
        return;
    }else{
        if (hourRow>hourCur) {
            return;
        }else if (hourRow<hourCur){
            [self setDefaultPickView];
            return;
        }else{
            if (minuteRow>=minuteCur) {
                return;
            }else{
                [self setDefaultPickView];
                return;
            }
        }
    }
}
@end
2.TimePickView.xib

 

posted @ 2016-04-07 22:27  MakeKeyReuseable  阅读(267)  评论(0编辑  收藏  举报