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 =@"yyyy年MM月";
//初始话是否提交过签到;
_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
- ios 在FSCalendar基础上开发的签到功能 记录一下 不是太完善
- 在网上找到的一个附件上传功能,自己完善了一下,记录防止忘记
- iOS日历视图 FSCalendar的使用
- Android SwitchButton 完善版(在前人基础上完善)
- FSCalendar
- 自定义视图,在UIView基础上增加--iOS开发
- [转]C# ListView 单击标题实现排序(在转载的基础上有所完善)
- 在MSP430的基础上实现bootloader的功能
- 连续签到的功能
- 每日签到的功能
- 在gephhi源码的基础上添加贴图功能
- 自写:二维码签到程序,功能咋能完善一些?
- ios 签到功能 补签功能 日历
- 签到一下
- 在Livemedia的基础上开发自己的流媒体客户端
- 在Livemedia的基础上开发自己的流媒体客户端
- 在Livemedia的基础上开发自己的流媒体客户端
- 在Livemedia的基础上开发自己的流媒体客户端
- Maximum Subsequence Sum
- 51nod-1380
- bzoj4916
- 【高精度】大整数类
- Kotlin从入门到放弃之基础篇(四)——属性、字段、接口
- ios 在FSCalendar基础上开发的签到功能 记录一下 不是太完善
- centos7下yum换阿里云源
- 二进制数中1的个数(拓展-比较二进制数AB不同)
- POJ3304 计算几何--判断直线与线段相交
- 2017网易8个编程题
- linux find命令思维导图
- 整理一下React native的填坑指南
- newFixedThreadPool线程池
- 20170927_快排应用_数组中寻找最大的K个数