370 lines
15 KiB
Objective-C
370 lines
15 KiB
Objective-C
//
|
|
// YMMineUserInfoDateView.m
|
|
// YUMI
|
|
//
|
|
// Created by YUMI on 2021/9/23.
|
|
//
|
|
|
|
#import "XPMineUserInfoDateView.h"
|
|
///Third
|
|
#import <Masonry/Masonry.h>
|
|
///Tool
|
|
#import "DJDKMIMOMColor.h"
|
|
|
|
@interface XPMineUserInfoDateView ()<UIPickerViewDelegate,UIPickerViewDataSource>
|
|
@property (nonatomic,strong)NSMutableArray * selDateArray;
|
|
|
|
@property (nonatomic,strong)NSDateComponents * components;//时间结构体、可计算时间间隔、获取年月日时分、
|
|
@property(nonatomic,strong) UIView *bgView;
|
|
///
|
|
@property (nonatomic,strong) UIButton *cancleButton;
|
|
///
|
|
@property (nonatomic,strong) UIButton *sureButton;
|
|
///
|
|
@property (nonatomic, strong) UIPickerView *pickerView;
|
|
///样式
|
|
@property (nonatomic, strong) NSDateFormatter *dateFormatter;
|
|
///年龄
|
|
@property(nonatomic,strong) UILabel *ageView;
|
|
///星座
|
|
@property(nonatomic,strong) UILabel *starView;
|
|
@property(nonatomic,strong) NSMutableArray *dataSourceArray;
|
|
@end
|
|
|
|
@implementation XPMineUserInfoDateView
|
|
|
|
- (instancetype)initWithFrame:(CGRect)frame {
|
|
self = [super initWithFrame:frame];
|
|
if (self) {
|
|
[self initSubViews];
|
|
[self initSubViewConstraints];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
#pragma mark - Private Method
|
|
- (void)initSubViews {
|
|
self.backgroundColor = [UIColor clearColor];
|
|
[self addSubview:self.cancleButton];
|
|
[self addSubview:self.bgView];
|
|
[self.bgView addSubview:self.ageView];
|
|
[self.bgView addSubview:self.starView];
|
|
[self.bgView addSubview:self.sureButton];
|
|
[self.bgView addSubview:self.pickerView];
|
|
}
|
|
|
|
- (void)initSubViewConstraints {
|
|
|
|
[self.cancleButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.edges.equalTo(self);
|
|
}];
|
|
[self.bgView mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.leading.bottom.trailing.equalTo(self).inset(kGetScaleWidth(0));
|
|
make.height.mas_equalTo(kGetScaleWidth(383));
|
|
}];
|
|
[self.ageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.top.mas_equalTo(kGetScaleWidth(16));
|
|
make.width.mas_equalTo(kGetScaleWidth(98));
|
|
make.height.mas_equalTo(kGetScaleWidth(36));
|
|
make.leading.mas_equalTo(kGetScaleWidth(80));
|
|
}];
|
|
[self.starView mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.trailing.mas_equalTo(-kGetScaleWidth(80));
|
|
make.top.mas_equalTo(kGetScaleWidth(16));
|
|
make.width.mas_equalTo(kGetScaleWidth(98));
|
|
make.height.mas_equalTo(kGetScaleWidth(36));
|
|
}];
|
|
[self.sureButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.bottom.mas_equalTo(-kGetScaleWidth(42));
|
|
make.centerX.equalTo(self.bgView);
|
|
make.width.mas_equalTo(kGetScaleWidth(303));
|
|
make.height.mas_equalTo(kGetScaleWidth(48));
|
|
}];
|
|
[self.pickerView mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.left.right.mas_equalTo(self);
|
|
make.bottom.equalTo(self.sureButton.mas_top);
|
|
make.top.equalTo(self.starView.mas_bottom).mas_offset(kGetScaleWidth(10));
|
|
|
|
}];
|
|
}
|
|
#pragma mark- UIPickerViewDelegate,UIPickerViewDataSource
|
|
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
|
|
|
|
return 3;
|
|
}
|
|
|
|
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
|
|
|
|
return [_dataSourceArray[component] count];
|
|
}
|
|
|
|
-(CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{
|
|
|
|
return KScreenWidth/3;
|
|
}
|
|
-(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
|
|
return kGetScaleWidth(40);
|
|
}
|
|
|
|
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
|
|
[self changeSpearatorLineColor];
|
|
UIView *bgView = (UIView *)view;
|
|
UILabel *lab = [view viewWithTag:100];
|
|
if (!bgView) {
|
|
bgView = [UIView new];
|
|
bgView.backgroundColor = [UIColor clearColor];
|
|
}
|
|
if(!lab){
|
|
lab = [UILabel labelInitWithText:@"" font:kFontRegular(20) textColor:UIColorFromRGB(0x1E1E1F)];
|
|
[bgView addSubview:lab];
|
|
CGFloat x ;
|
|
if(component == 0){
|
|
x = kGetScaleWidth(20) ;
|
|
}else if(component == 1){
|
|
x = kGetScaleWidth(10) ;
|
|
}else{
|
|
x = 0 ;
|
|
}
|
|
[lab mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.top.equalTo(bgView);
|
|
make.leading.mas_equalTo(kGetScaleWidth(x));
|
|
make.width.mas_equalTo(kGetScaleWidth(98));
|
|
make.height.mas_equalTo(kGetScaleWidth(40));
|
|
}];
|
|
lab.layer.cornerRadius = kGetScaleWidth(8);
|
|
lab.layer.masksToBounds = YES;
|
|
lab.textAlignment = NSTextAlignmentCenter;
|
|
lab.tag = 100;
|
|
}else{
|
|
CGFloat x ;
|
|
if(component == 0){
|
|
x = kGetScaleWidth(20) ;
|
|
}else if(component == 1){
|
|
x = kGetScaleWidth(10) ;
|
|
}else{
|
|
x = 0 ;
|
|
}
|
|
[lab mas_remakeConstraints:^(MASConstraintMaker *make) {
|
|
make.top.equalTo(bgView);
|
|
make.leading.mas_equalTo(kGetScaleWidth(x));
|
|
make.width.mas_equalTo(kGetScaleWidth(98));
|
|
make.height.mas_equalTo(kGetScaleWidth(40));
|
|
}];
|
|
}
|
|
|
|
NSArray *yearArr = @[YMLocalizedString(@"XPIncomeRecordGoldDetailsPickViewView3") ,YMLocalizedString(@"XPIncomeRecordGoldDetailsPickViewView4"),YMLocalizedString(@"XPIncomeRecordGoldDetailsPickViewView5")];
|
|
if ([self.selDateArray[component]isEqualToString:self.dataSourceArray[component][row]] ) {
|
|
lab.backgroundColor = UIColorFromRGB(0xF7F7F7);
|
|
lab.font = kFontRegular(20);
|
|
lab.text = [NSString stringWithFormat:@"%@%@",self.selDateArray[component],yearArr[component]];
|
|
lab.textColor = UIColorFromRGB(0x1E1E1F);
|
|
}else{
|
|
lab.backgroundColor = [UIColor clearColor];
|
|
lab.font = kFontRegular(18);
|
|
lab.text = [NSString stringWithFormat:@"%@%@",self.dataSourceArray[component][row],yearArr[component]];
|
|
lab.textColor = UIColorRGBAlpha(0x1E1E1F, 0.6);
|
|
}
|
|
return bgView;
|
|
}
|
|
#pragma mark - 改变分割线的颜色
|
|
- (void)changeSpearatorLineColor {
|
|
for(UIView *speartorView in _pickerView.subviews) {
|
|
if (speartorView.frame.size.height < 80) {//找出当前的 View
|
|
speartorView.backgroundColor = [UIColor clearColor];
|
|
}else{
|
|
speartorView.backgroundColor = [UIColor clearColor];
|
|
}
|
|
}
|
|
}
|
|
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
|
|
[self.selDateArray replaceObjectAtIndex:component withObject:self.dataSourceArray[component][row]];
|
|
[pickerView reloadAllComponents];
|
|
NSString *time = [NSString stringWithFormat:@"%@-%@-%@",self.selDateArray[0],self.selDateArray[1],self.selDateArray[2]];
|
|
NSDate *date = [NSDate at_dateFromString:time];
|
|
NSTimeInterval interval = [date timeIntervalSince1970] * 1000;
|
|
self.ageView.text = [NSString stringWithFormat:@"%ld%@",[PLTimeUtil ageWithDateFromBirth:interval],YMLocalizedString(@"XPMineUserInfoDateView3")];
|
|
self.starView.text = [NSString stringWithFormat:@"%@%@",[NSString getCalculateConstellationTextWithMonth:interval],YMLocalizedString(@"XPMineUserInfoDateView4")] ;
|
|
}
|
|
//数据源
|
|
-(NSMutableArray *)dataSourceArray{
|
|
if(!_dataSourceArray){
|
|
NSMutableArray * yearArr = [@[]mutableCopy];
|
|
for (int i = 1900; i < 2050; i++) {
|
|
[yearArr addObject:@(i).stringValue];
|
|
}
|
|
NSArray * monthArr = @[@"01",@"02",@"03",@"04",@"05",@"06",@"07",@"08",@"09",@"10",@"11",@"12"];
|
|
NSArray * dayArr = [self dayArrayMonth:self.components.month year:self.components.year];
|
|
|
|
NSArray * array = @[yearArr,monthArr,dayArr];
|
|
_dataSourceArray = [array mutableCopy];
|
|
}
|
|
|
|
return _dataSourceArray;
|
|
}
|
|
|
|
//根据月份返回日期
|
|
-(NSArray *)dayArrayMonth:(NSInteger)month year:(NSInteger)year{
|
|
NSArray * dayArr = [[NSArray alloc]init];
|
|
|
|
switch (month) {
|
|
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
|
|
dayArr = @[@"01",@"02",@"03",@"04",@"05",@"06",@"07",@"08",@"09",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",@"18",@"19",@"20",@"21",@"22",@"23",@"24",@"25",@"26",@"27",@"28",@"29",@"30",@"31"];
|
|
|
|
break;
|
|
case 4: case 6: case 9: case 11:
|
|
dayArr = @[@"01",@"02",@"03",@"04",@"05",@"06",@"07",@"08",@"09",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",@"18",@"19",@"20",@"21",@"22",@"23",@"24",@"25",@"26",@"27",@"28",@"29",@"30"];
|
|
break;
|
|
case 2:
|
|
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {///是润年
|
|
dayArr = @[@"01",@"02",@"03",@"04",@"05",@"06",@"07",@"08",@"09",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",@"18",@"19",@"20",@"21",@"22",@"23",@"24",@"25",@"26",@"27",@"28",@"29"];
|
|
}else{
|
|
dayArr = @[@"01",@"02",@"03",@"04",@"05",@"06",@"07",@"08",@"09",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",@"18",@"19",@"20",@"21",@"22",@"23",@"24",@"25",@"26",@"27",@"28"];
|
|
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
return dayArr;
|
|
|
|
}
|
|
#pragma mark - Event
|
|
- (void)onClickCancelButton:(UIButton *)sender {
|
|
self.backgroundColor = [UIColor clearColor];
|
|
[UIView animateWithDuration:0.5 animations:^{
|
|
self.frame = CGRectMake(0, KScreenHeight, KScreenWidth, KScreenHeight);
|
|
}completion:^(BOOL finished) {
|
|
[self removeFromSuperview];
|
|
}];
|
|
|
|
}
|
|
|
|
- (void)onClickSureButton:(UIButton *)sender {
|
|
if (self.delegate && [self.delegate respondsToSelector:@selector(xPMineUserInfoDateView:didClickSureButton:)]) {
|
|
NSString *time = [NSString stringWithFormat:@"%@-%@-%@",self.selDateArray[0],self.selDateArray[1],self.selDateArray[2]];
|
|
[self.delegate xPMineUserInfoDateView:self didClickSureButton:time];
|
|
}
|
|
self.backgroundColor = [UIColor clearColor];
|
|
[UIView animateWithDuration:0.5 animations:^{
|
|
self.frame = CGRectMake(0, KScreenHeight, KScreenWidth, KScreenHeight);
|
|
}completion:^(BOOL finished) {
|
|
[self removeFromSuperview];
|
|
}];
|
|
|
|
}
|
|
//分解传来需要显示的时间
|
|
-(NSArray *)receiveTime:(NSString *)timeStr{
|
|
|
|
NSArray * timeArray = [timeStr componentsSeparatedByString:@"-"];
|
|
NSMutableArray * timeArr = [[NSMutableArray alloc]init];
|
|
for (int i = 0; i<timeArray.count; i++) {
|
|
NSString * str = [timeArray objectAtIndex:i];
|
|
if (str.length == 1) {
|
|
[timeArr addObject:[NSString stringWithFormat:@"0%@",str]];
|
|
}else if(str.length == 0){
|
|
[timeArr addObject:@"00"];
|
|
}else{
|
|
[timeArr addObject:str];
|
|
}
|
|
}
|
|
|
|
return timeArr;
|
|
}
|
|
#pragma mark - Getters And Setters
|
|
- (void)setTime:(NSTimeInterval)time {
|
|
_time = time;
|
|
NSDate *date = [NSDate dateWithTimeIntervalSince1970:time];
|
|
NSTimeZone *timeZone= [NSTimeZone systemTimeZone];
|
|
NSInteger seconds= [timeZone secondsFromGMTForDate:date];
|
|
NSDate *newDate= [date dateByAddingTimeInterval:seconds];
|
|
NSString *dateStr = [self.dateFormatter stringFromDate:newDate];
|
|
NSArray * timeArr = [[NSArray alloc]init];
|
|
if (dateStr) {
|
|
timeArr = [self receiveTime:dateStr];
|
|
}
|
|
if (timeArr.count == 3) {//需要显示传入的时间
|
|
self.selDateArray = [timeArr mutableCopy];
|
|
for (int i = 0; i < 3; i++) {
|
|
[self.pickerView selectRow: [self.dataSourceArray[i] indexOfObject:self.selDateArray[i]] inComponent:i animated:YES];
|
|
}
|
|
|
|
}
|
|
self.ageView.text = [NSString stringWithFormat:@"%ld%@",[PLTimeUtil ageWithDateFromBirth:time*1000],YMLocalizedString(@"XPMineUserInfoDateView3")];
|
|
self.starView.text = [NSString stringWithFormat:@"%@%@",[NSString getCalculateConstellationTextWithMonth:time*1000],YMLocalizedString(@"XPMineUserInfoDateView4")] ;
|
|
}
|
|
- (UIButton *)cancleButton {
|
|
if (!_cancleButton) {
|
|
_cancleButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
|
[_cancleButton addTarget:self action:@selector(onClickCancelButton:) forControlEvents:UIControlEventTouchUpInside];
|
|
|
|
}
|
|
return _cancleButton;
|
|
}
|
|
|
|
- (UIButton *)sureButton {
|
|
if (!_sureButton) {
|
|
_sureButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
|
[_sureButton setTitle:YMLocalizedString(@"XPMineUserInfoDateView2") forState:UIControlStateNormal];
|
|
[_sureButton addTarget:self action:@selector(onClickSureButton:) forControlEvents:UIControlEventTouchUpInside];
|
|
_sureButton.titleLabel.font = kFontMedium(16);
|
|
[_sureButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
|
|
UIImage *image = [UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor],[DJDKMIMOMColor confirmButtonGradientMiddleColor],[DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(kGetScaleWidth(303), kGetScaleWidth(48))];
|
|
[_sureButton setBackgroundImage:image forState:UIControlStateNormal];
|
|
_sureButton.layer.cornerRadius = kGetScaleWidth(48)/2;
|
|
_sureButton.layer.masksToBounds = YES;
|
|
}
|
|
return _sureButton;
|
|
}
|
|
|
|
- (NSDateFormatter *)dateFormatter {
|
|
if (!_dateFormatter) {
|
|
_dateFormatter = [[NSDateFormatter alloc] init];
|
|
_dateFormatter.dateFormat = @"yyyy-MM-dd";
|
|
}
|
|
return _dateFormatter;
|
|
}
|
|
|
|
- (UIPickerView *)pickerView{
|
|
if (!_pickerView){
|
|
_pickerView = [[UIPickerView alloc]initWithFrame:CGRectZero];
|
|
_pickerView.delegate = self;
|
|
_pickerView.dataSource = self;
|
|
}
|
|
return _pickerView;
|
|
}
|
|
- (UIView *)bgView{
|
|
if(!_bgView){
|
|
_bgView = [UIView new];
|
|
_bgView.backgroundColor = [UIColor whiteColor];
|
|
[_bgView setCornerWithLeftTopCorner:kGetScaleWidth(20) rightTopCorner:kGetScaleWidth(20) bottomLeftCorner:0 bottomRightCorner:0 size:CGSizeMake(KScreenWidth, kGetScaleWidth(383))];
|
|
}
|
|
return _bgView;
|
|
}
|
|
- (UILabel *)ageView{
|
|
if(!_ageView){
|
|
_ageView = [UILabel labelInitWithText:@"" font:kFontMedium(16) textColor:UIColorFromRGB(0x1E1E1F)];
|
|
[_ageView setCornerWithLeftTopCorner:kGetScaleWidth(7) rightTopCorner:kGetScaleWidth(7) bottomLeftCorner:kGetScaleWidth(7) bottomRightCorner:kGetScaleWidth(7) size:CGSizeMake(kGetScaleWidth(98), kGetScaleWidth(36))];
|
|
_ageView.backgroundColor = UIColorFromRGB(0xF7F7F7);
|
|
_ageView.textAlignment = NSTextAlignmentCenter;
|
|
}
|
|
return _ageView;
|
|
}
|
|
- (UILabel *)starView{
|
|
if(!_starView){
|
|
_starView = [UILabel labelInitWithText:@"" font:kFontMedium(16) textColor:UIColorFromRGB(0x1E1E1F)];
|
|
[_starView setCornerWithLeftTopCorner:kGetScaleWidth(7) rightTopCorner:kGetScaleWidth(7) bottomLeftCorner:kGetScaleWidth(7) bottomRightCorner:kGetScaleWidth(7) size:CGSizeMake(kGetScaleWidth(98), kGetScaleWidth(36))];
|
|
_starView.backgroundColor = UIColorFromRGB(0xF7F7F7);
|
|
_starView.textAlignment = NSTextAlignmentCenter;
|
|
}
|
|
return _starView;
|
|
}
|
|
- (NSDateComponents *)components{
|
|
if(!_components){
|
|
NSCalendar * calender = [NSCalendar currentCalendar];
|
|
_components = [calender components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute fromDate:[NSDate date]];
|
|
}
|
|
return _components;
|
|
}
|
|
@end
|