ios 在FSCalendar基础上开发的签到功能 记录一下 不是太完善

来源:互联网 发布:java ee 64位下载 编辑:程序博客网 时间:2024/06/15 06:03



#import "SignViewController.h"

#import <FSCalendarExtensions.h>

#import "XMGContent.h"

#import "AFNetworking.h"

#import "SignModel.h"

#import  "UIView+MJAlertView.h"

#import <MJExtension.h>

@interface SignViewController ()


@end


@implementation SignViewController

//日期转换后的集合

NSMutableArray<NSDate*>* signDatas;

//日期对象

NSMutableArray* signDatasStr;


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view from its nib.

    self.navigationItem.title=@"签到";

    [self.Sing_Button addTarget:self action:@selector(goSign:) forControlEvents:UIControlEventTouchUpInside];

    //CalendarParent接受用户的手势处理便于子控件处理手势

    [self.CalendarParent setUserInteractionEnabled:YES];

    //日历的设置

    FSCalendar* uicalender=[[FSCalendar alloc]initWithFrame:CGRectMake(0,0, _CalendarParent.frame.size.width, _CalendarParent.frame.size.height)];

    [_CalendarParent addSubview:uicalender];

    uicalender.delegate=self;

    uicalender.dataSource=self;

    self.calendar=uicalender;

    self.calendar.appearance.caseOptions=FSCalendarCaseOptionsHeaderUsesDefaultCase;

    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];//设置为中文

    self.calendar.locale = locale;

    self.calendar.appearance.headerMinimumDissolvedAlpha =0;

    _calendar.appearance.headerDateFormat =@"yyyyMM";

    //初始话是否提交过签到;

    _sginFlag=false;

    //调用联网

    [self getSingleData:[self getMonthFirstAndLastDayWith:[self getDataStr]]];

}


//联网获取签到的信息

-(void)getSingleData:(NSArray*)SectionDate{

    NSString* url=[XMGBaseUrl stringByAppendingString:XMGGetSignData];

    NSMutableDictionary* nmd=[NSMutableDictionary dictionary];

    nmd[@"userid"]=@"5";

    nmd[@"page"]=@"0";

    nmd[@"rows"]=@"0";

    //起始时间

    NSLog(@"%@开始时间",SectionDate[0]);

    NSLog(@"%@结束时间",SectionDate[1]);

    nmd[@"time1"]=SectionDate[0];

    //结束时间

    nmd[@"time2"]=SectionDate[1];

    [signDatasStrremoveAllObjects];

    [signDatasremoveAllObjects];

    [[AFHTTPSessionManagermanager]GET:[NSURLURLWithString:url].absoluteStringparameters:nmd progress:nilsuccess:^(NSURLSessionDataTask *_Nonnull task, id _Nullable responseObject) {

        signDatasStr=[SignModelmj_objectArrayWithKeyValuesArray:responseObject[@"list"]];

        signDatas=[[NSMutableArrayalloc]init];

        for (int i=0; i<signDatasStr.count; i++) {

            [signDatasaddObject:[selfchangeStrNsData:((SignModel*)signDatasStr[i]).date]];

            

        }

        [self.calendarreloadData];

    } failure:^(NSURLSessionDataTask *_Nullable task, NSError *_Nonnull error) {

        NSLog(@"联网失败");

    }];

    NSLog(@"我要刷新了");

}


//标记已签到的日期



//设置时间的选中状态

-(BOOL)calendar:(FSCalendar *)calendar shouldSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition{

    if ([selfisSameDay:date date2:[selfgetData]]) {

        returntrue;

    }

    else{

        returnfalse;

    }

}

//点击签到

-(void)goSign:(UIButton*)bt{

    if (bt.tag==10001) {

        [UIView addMJNotifierWithText:@"您已经签到过了,明天再来吧" dismissAutomatically:YES AlterViewbackground:[UIColor greenColor] AlterViewtextColor:[UIColor grayColor]];

    }

    elseif (bt.tag==10002)

    {

        [self commitSignDate];

    }

}

//联网提交签到 日期

-(void)commitSignDate{

    NSString* url=[XMGBaseUrl stringByAppendingString:XMGSignData];

    NSMutableDictionary* nmud2=[NSMutableDictionary dictionary];

    nmud2[@"userid"]=@"5";

    [[AFHTTPSessionManager manager]GET:[NSURL URLWithString:url].absoluteString parameters:nmud2 progress:nil success:^(NSURLSessionDataTask *_Nonnull task, id _Nullable responseObject) {

        

        [self getSingleData:[self getMonthFirstAndLastDayWith:[self getDataStr]]];

        [UIView addMJNotifierWithText:@"签到成功" dismissAutomatically:YES AlterViewbackground:[UIColor greenColor] AlterViewtextColor:[UIColor grayColor]];

    } failure:^(NSURLSessionDataTask *_Nullable task, NSError * _Nonnull error) {

        NSLog(@"提价失败");

    }];

}


//通过后台签到 确定ui

-(NSString *)calendar:(FSCalendar *)calendar subtitleForDate:(NSDate *)date{

    NSDate* today=[self getData];

    NSString* result=nil;

    for (NSDate* selectDatain signDatas) {

        int differs=[self getDifferDate:today and:selectData];

        if ([self isSameDay:date date2:today]) {

            if ([self isSameDay:selectData date2:date]) {

                result=@"已签到";

                _sginFlag=10001;

            }

            else{

                 _sginFlag=10002;

                result=@"今天";

            }

        }

        elseif(differs>=0){

            if ([self isSameDay:selectData date2:date]) {

                result=@"已签到";

            }

        }

        else{

            result= @"nil";

        }

    }

     [_Sing_Button setTag:_sginFlag];

    return result;

}


-(int)getDifferDate:(NSDate*)date1 and :(NSDate*)date2{

    NSTimeInterval time = [date1 timeIntervalSinceDate:date2];

    //开始时间和结束时间的中间相差的时间

    int days;

    days = ((int)time)/(3600*24); //一天是24小时*3600

    return days;

}


//两个日期判断是否是同一天

- (BOOL)isSameDay:(NSDate*)date1 date2:(NSDate*)date2

{

    NSCalendar* calendar = [NSCalendar currentCalendar];

    unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;

    NSDateComponents* comp1 = [calendar components:unitFlags fromDate:date1];

    NSDateComponents* comp2 = [calendar components:unitFlags fromDate:date2];

    

    return [comp1 day]  == [comp2 day] &&

    [comp1 month] == [comp2 month] &&

    [comp1 year]  == [comp2 year];

}

//测试相减一天的处理

- (BOOL)isSameNoDay:(NSDate*)date1 date2:(NSDate*)date2 dats:(int)differ

{

    NSCalendar* calendar = [NSCalendar currentCalendar];

    

    unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;

    NSDateComponents* comp1 = [calendar components:unitFlags fromDate:date1];

    NSDateComponents* comp2 = [calendar components:unitFlags fromDate:date2];

    return [comp1 day]+differ  == [comp2 day] &&

    [comp1 month] == [comp2 month] &&

    [comp1 year]  == [comp2 year];

}


//页面切换的时候

-(void)calendarCurrentMonthDidChange:(FSCalendar *)calendar{

    NSDate* data=[self.calendar currentPage];

    //    NSDate *nextMonth = [self.calendar dateByAddingMonths:1 toDate:data];

    NSArray* sectionDateN=[self getMonthFirstAndLastDayWith:[self getDataStrByDate:data]];

    [self getSingleData:sectionDateN];

}

//通过指定日期获取当月 月初和月末的两天

- (NSArray *)getMonthFirstAndLastDayWith:(NSString *)dateStr{

    NSDateFormatter *format=[[NSDateFormatter alloc] init];

    [format setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    NSDate *newDate=[format dateFromString:dateStr];

    double interval =0;

    NSDate *firstDate = nil;

    NSDate *lastDate = nil;

    NSCalendar *calendar = [NSCalendar currentCalendar];

    BOOL OK = [calendar rangeOfUnit:NSCalendarUnitMonth startDate:& firstDate interval:&interval forDate:newDate];

    

    if (OK) {

        lastDate = [firstDate dateByAddingTimeInterval:interval -1];

    }else {

        return@[@"",@""];

    }

    

    NSDateFormatter *myDateFormatter = [[NSDateFormatter alloc] init];

    [myDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];

    [myDateFormatter setTimeZone:timeZone];

    NSString *firstString = [myDateFormatter stringFromDate: firstDate];

    NSString *lastString = [myDateFormatter stringFromDate: lastDate];

    return@[firstString, lastString];

}


//获取当前日期的字符串

-(NSString*)getDataStr{

    NSDate *date = [NSDate date];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    [formatter setDateStyle:NSDateFormatterMediumStyle];

    [formatter setTimeStyle:NSDateFormatterShortStyle];

    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];

    [formatter setTimeZone:timeZone];

    return [formatter stringFromDate:date];

}

//获取指定日期的字符串

-(NSString*)getDataStrByDate:(NSDate*)date{

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    [formatter setDateStyle:NSDateFormatterMediumStyle];

    [formatter setTimeStyle:NSDateFormatterShortStyle];

    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];

    [formatter setTimeZone:timeZone];

    return [formatter stringFromDate:date];

}

//获取日期

-(NSDate*)getData{

    NSDate *date = [NSDate date];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    [formatter setDateStyle:NSDateFormatterMediumStyle];

    [formatter setTimeStyle:NSDateFormatterShortStyle];

    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];

    [formatter setTimeZone:timeZone];

    return date;

}

//字符串转日期格式

-(NSDate*)changeStrNsData:(NSString*)str{

    NSDateFormatter *format = [[NSDateFormatter alloc] init];

    // 设置日期格式为了转换成功

    format.dateFormat = @"yyyy-MM-dd HH:mm:ss";

    NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];

    [format setTimeZone:timeZone];

//     NSString * -> NSDate *

    NSDate *data = [format dateFromString:str];

    return data;

}

//屏蔽不可点

-(BOOL)calendar:(FSCalendar *)calendar shouldSelectDate:(NSDate *)date{

    returnNO;

}

-(UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance titleSelectionColorForDate:(NSDate *)date{

    if ([self.calendar isDateInToday:date]) {

        return [UIColor blueColor];

    }

    returnnil;

}



@end


原创粉丝点击