Files
peko-ios/YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoDateView.m
eggmanQQQ fc92135ce6 完善个人资料页功能
完成多麦位
Bug fix
2024-06-27 21:31:00 +08:00

384 lines
16 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));
make.centerX.equalTo(self);
}];
// [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.leading.trailing.mas_equalTo(self);
make.bottom.equalTo(self.sureButton.mas_top);
make.top.equalTo(self.ageView.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){
// 获取当前日期
NSDate *currentDate = [NSDate date];
// 创建日历对象
NSCalendar *calendar = [NSCalendar currentCalendar];
// 获取年、月、日组件
NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:currentDate];
NSInteger year = [components year];
NSMutableArray * yearArr = [@[]mutableCopy];
for (int i = 1900; i <= year; 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] xpSafeObjectAtIndex: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";
[_dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Shanghai"]];
}
return _dateFormatter;
}
- (UIPickerView *)pickerView{
if (!_pickerView){
_pickerView = [[UIPickerView alloc]initWithFrame:CGRectZero];
if (@available(iOS 13.0, *)) {
_pickerView.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
}
_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