美文网首页
iOS日历(collectionView)

iOS日历(collectionView)

作者: 叫我马小帅 | 来源:发表于2016-08-19 10:04 被阅读970次

    @property(nonatomic,strong)UICollectionView* collectionView;

    @property(nonatomic,strong)NSDate*date;

    @property(nonatomic,strong)NSArray*weekDayArray;

    @property(nonatomic,strong)NSDate*today;

    @property(nonatomic,copy)NSString* yue;

    @property(nonatomic,copy)NSString* nian;

    @property(nonatomic,strong)UILabel* lable;

    // 用到的属性

    // 给数组赋值 初始化date

    _weekDayArray=@[@"日",@"一",@"二",@"三",@"四",@"五",@"六"];

    self.date= [NSDatedate];

    self.today=self.date;

    // 创建 collectionView

    CGFloatitemWidth =self.view.frame.size.width/7;

    CGFloatitemHeight =self.view.frame.size.height/7;

    UICollectionViewFlowLayout*layout = [[UICollectionViewFlowLayoutalloc]init];

    layout.sectionInset=UIEdgeInsetsMake(0,0,0,0);

    layout.itemSize=CGSizeMake(itemWidth, itemHeight);

    layout.minimumLineSpacing=0;

    layout.minimumInteritemSpacing=0;

    self.collectionView= [[UICollectionViewalloc]initWithFrame:CGRectMake(0,self.view.frame.size.height/8,self.view.frame.size.width,self.view.frame.size.height)collectionViewLayout:layout];

    self.collectionView.backgroundColor= [UIColorwhiteColor];

    self.collectionView.delegate=self;

    self.collectionView.dataSource=self;

    self.collectionView.pagingEnabled=YES;

    self.collectionView.showsHorizontalScrollIndicator=NO;

    [_collectionViewregisterClass:[TstCollectionViewCellclass]forCellWithReuseIdentifier:@"cell"];

    [self.viewaddSubview:self.collectionView];

    // 重写dateset方法并给上方lable赋值

    -(void)setDate:(NSDate*)date{

    _date= date;

    self.lable= [[UILabelalloc]initWithFrame:CGRectMake(0,20,200,80)];

    self.lable.backgroundColor=[UIColorcyanColor];

    [self.viewaddSubview:self.lable];

    self.lable.text=[NSStringstringWithFormat:@"%.2ld-%li",(long)[selfmonth:date],(long)[selfyear:date]];

    self.lable.textColor= [UIColorblackColor];

    self.yue= [NSStringstringWithFormat:@"%ld",(long)[selfmonth:date]];

    self.nian= [NSStringstringWithFormat:@"%ld",(long)[selfyear:date]];

    [_collectionViewreloadData];

    }

    // 日历的逻辑

    - (NSInteger)day:(NSDate*)date{

    NSDateComponents*components = [[NSCalendarcurrentCalendar]components:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay)fromDate:date];

    return[componentsday];

    }

    - (NSInteger)month:(NSDate*)date{

    NSDateComponents*components = [[NSCalendarcurrentCalendar]components:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay)fromDate:date];

    return[componentsmonth];

    }

    - (NSInteger)year:(NSDate*)date{

    NSDateComponents*components = [[NSCalendarcurrentCalendar]components:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay)fromDate:date];

    return[componentsyear];

    }

    - (NSInteger)firstWeekdayInThisMonth:(NSDate*)date{

    NSCalendar*calendar = [NSCalendarcurrentCalendar];

    [calendarsetFirstWeekday:1];//1.Sun. 2.Mon. 3.Thes. 4.Wed. 5.Thur. 6.Fri. 7.Sat.

    NSDateComponents*comp = [calendarcomponents:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay)fromDate:date];

    [compsetDay:1];

    NSDate*firstDayOfMonthDate = [calendardateFromComponents:comp];

    NSUIntegerfirstWeekday = [calendarordinalityOfUnit:NSCalendarUnitWeekdayinUnit:NSCalendarUnitWeekOfMonthforDate:firstDayOfMonthDate];

    returnfirstWeekday -1;

    }

    - (NSInteger)totaldaysInThisMonth:(NSDate*)date{

    NSRangetotaldaysInMonth = [[NSCalendarcurrentCalendar]rangeOfUnit:NSCalendarUnitDayinUnit:NSCalendarUnitMonthforDate:date];

    returntotaldaysInMonth.length;

    }

    - (NSInteger)totaldaysInMonth:(NSDate*)date{

    NSRangedaysInlastMonth = [[NSCalendarcurrentCalendar]rangeOfUnit:NSCalendarUnitDayinUnit:NSCalendarUnitMonthforDate:date];

    returndaysInlastMonth.length;

    }

    - (NSDate*)lastMonth:(NSDate*)date{

    NSDateComponents*dateComponents = [[NSDateComponentsalloc]init];

    dateComponents.month= -1;

    NSDate*newDate = [[NSCalendarcurrentCalendar]dateByAddingComponents:dateComponentstoDate:dateoptions:0];

    returnnewDate;

    }

    - (NSDate*)nextMonth:(NSDate*)date{

    NSDateComponents*dateComponents = [[NSDateComponentsalloc]init];

    dateComponents.month= +1;

    NSDate*newDate = [[NSCalendarcurrentCalendar]dateByAddingComponents:dateComponentstoDate:dateoptions:0];

    returnnewDate;

    }

    //collectionViiew协议方法

    - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView*)collectionView

    {

    return2;

    }

    - (NSInteger)collectionView:(UICollectionView*)collectionView numberOfItemsInSection:(NSInteger)section

    {

    if(section ==0) {

    return_weekDayArray.count;

    }else{

    return42;

    }

    }

    - (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath

    {

    TstCollectionViewCell*cell = [collectionViewdequeueReusableCellWithReuseIdentifier:@"cell"forIndexPath:indexPath];

    if(indexPath.section==0) {

    [cell.dateLabelsetText:_weekDayArray[indexPath.row]];

    cell.dateLabel.textColor= [UIColorredColor];

    }else{

    //

    NSIntegerdaysInThisMonth = [selftotaldaysInMonth:_date];

    NSIntegerfirstWeekday = [selffirstWeekdayInThisMonth:_date];

    NSIntegerday =0;

    NSIntegeri = indexPath.row;

    //

    if(i < firstWeekday) {

    [cell.dateLabelsetText:@""];

    }elseif(i > firstWeekday + daysInThisMonth -1){

    [cell.dateLabelsetText:@""];

    }else{

    day = i - firstWeekday +1;

    cell.dateLabel.text= [NSStringstringWithFormat:@"%ld",(long)day];

    cell.dateLabel.textColor=[UIColorblackColor];

    }

    if([_todayisEqualToDate:_date]) {

    if(day == [selfday:_date]) {

    cell.dateLabel.textColor= [UIColorredColor];

    }elseif(day > [selfday:_date]) {

    cell.dateLabel.textColor= [UIColorgrayColor];

    }

    }elseif([_todaycompare:_date] ==NSOrderedAscending) {

    cell.dateLabel.textColor= [UIColorgrayColor];

    }

    }

    }

    returncell;

    }

    // 点击方法

    - (BOOL)collectionView:(UICollectionView*)collectionView shouldSelectItemAtIndexPath:(NSIndexPath*)indexPath

    {

    if(indexPath.section==1) {

    NSIntegerdaysInThisMonth = [selftotaldaysInMonth:_date];

    NSIntegerfirstWeekday = [selffirstWeekdayInThisMonth:_date];

    NSIntegerday =0;

    NSIntegeri = indexPath.row;

    if(i >= firstWeekday && i <= firstWeekday + daysInThisMonth -1) {

    day = i - firstWeekday +1;

    //this month

    if([_todayisEqualToDate:_date]) {

    if(day <= [selfday:_date]) {

    returnYES;

    }

    }elseif([_todaycompare:_date] ==NSOrderedDescending) {

    returnYES;

    }

    }

    }

    returnYES;

    }

    // 手势方法上个月 下个月

    - (void)addSwipe

    {

    UISwipeGestureRecognizer*swipLeft = [[UISwipeGestureRecognizeralloc]initWithTarget:selfaction:@selector(nexAction:)];

    swipLeft.direction=UISwipeGestureRecognizerDirectionLeft;

    [self.viewaddGestureRecognizer:swipLeft];

    UISwipeGestureRecognizer*swipRight = [[UISwipeGestureRecognizeralloc]initWithTarget:selfaction:@selector(previouseAction:)];

    swipRight.direction=UISwipeGestureRecognizerDirectionRight;

    [self.viewaddGestureRecognizer:swipRight];

    }

    - (void)addTap

    {

    UITapGestureRecognizer*tap = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(hide)];

    [self.viewaddGestureRecognizer:tap];

    }

    - (IBAction)previouseAction:(UIButton*)sender

    {

    [UIViewtransitionWithView:self.viewduration:0.5options:UIViewAnimationOptionTransitionCurlDownanimations:^(void) {

    self.date= [selflastMonth:self.date];

    }completion:nil];

    }

    - (IBAction)nexAction:(UIButton*)sender

    {

    [UIViewtransitionWithView:self.viewduration:0.5options:UIViewAnimationOptionTransitionCurlUpanimations:^(void) {

    self.date= [selfnextMonth:self.date];

    }completion:nil];

    }

    相关文章

      网友评论

          本文标题:iOS日历(collectionView)

          本文链接:https://www.haomeiwen.com/subject/ndlbsttx.html