From 07f99ea8cccd4c90f3d2fed7ccaee12dbbd600ff Mon Sep 17 00:00:00 2001 From: Wenchao Ding Date: Sat, 5 Nov 2016 10:28:18 +0800 Subject: [PATCH] Add event label below --- Example/DIVExampleViewController.m | 147 ++++++++++++++++------------- FSCalendar/FSCalendarCalculator.m | 2 +- README.md | 3 +- 3 files changed, 83 insertions(+), 69 deletions(-) diff --git a/Example/DIVExampleViewController.m b/Example/DIVExampleViewController.m index f3f50ad..9b956aa 100644 --- a/Example/DIVExampleViewController.m +++ b/Example/DIVExampleViewController.m @@ -23,6 +23,8 @@ typedef NS_ENUM(NSUInteger, SelectionType) { @property (weak, nonatomic) FSCalendar *calendar; +@property (weak, nonatomic) UILabel *eventLabel; + @property (strong, nonatomic) NSCalendar *gregorian; @property (strong, nonatomic) NSDateFormatter *dateFormatter; @@ -57,13 +59,27 @@ typedef NS_ENUM(NSUInteger, SelectionType) { calendar.calendarHeaderView.backgroundColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.1]; calendar.calendarWeekdayView.backgroundColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.1]; - calendar.appearance.eventSelectionColor = [UIColor whiteColor]; calendar.appearance.eventOffset = CGPointMake(0, -7); - - calendar.today = nil; - + calendar.today = nil; // Hide the today circle [calendar registerClass:[DIVCalendarCell class] forCellReuseIdentifier:@"cell"]; + + + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(calendar.frame)+10, self.view.frame.size.width, 50)]; + label.textAlignment = NSTextAlignmentCenter; + label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline]; + [self.view addSubview:label]; + self.eventLabel = label; + + NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:@""]; + NSTextAttachment *attatchment = [[NSTextAttachment alloc] init]; + attatchment.image = [UIImage imageNamed:@"icon_cat"]; + attatchment.bounds = CGRectMake(0, -3, attatchment.image.size.width, attatchment.image.size.height); + [attributedText appendAttributedString:[NSAttributedString attributedStringWithAttachment:attatchment]]; + [attributedText appendAttributedString:[[NSAttributedString alloc] initWithString:@" Hey Daily Event "]]; + [attributedText appendAttributedString:[NSAttributedString attributedStringWithAttachment:attatchment]]; + self.eventLabel.attributedText = attributedText.copy; + } - (void)viewDidLoad @@ -96,7 +112,6 @@ typedef NS_ENUM(NSUInteger, SelectionType) { - (FSCalendarCell *)calendar:(FSCalendar *)calendar cellForDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)position { DIVCalendarCell *cell = [calendar dequeueReusableCellWithIdentifier:@"cell" forDate:date atMonthPosition:position]; - return cell; } @@ -104,72 +119,69 @@ typedef NS_ENUM(NSUInteger, SelectionType) { { DIVCalendarCell *divCell = (DIVCalendarCell *)cell; - switch (position) { - case FSCalendarMonthPositionCurrent: { - - divCell.eventIndicator.hidden = NO; - - BOOL isToday = [self.gregorian isDateInToday:date]; - - divCell.circleImageView.hidden = !isToday; - - SelectionType selectionType = SelectionTypeNone; + + // Custom today circle + divCell.circleImageView.hidden = ![self.gregorian isDateInToday:date]; + + + // Configure selection layer + if (position == FSCalendarMonthPositionCurrent || self.calendar.scope == FSCalendarScopeWeek) { + + divCell.eventIndicator.hidden = NO; + + SelectionType selectionType = SelectionTypeNone; + if ([calendar.selectedDates containsObject:date]) { + NSDate *previousDate = [self.gregorian dateByAddingUnit:NSCalendarUnitDay value:-1 toDate:date options:0]; + NSDate *nextDate = [self.gregorian dateByAddingUnit:NSCalendarUnitDay value:1 toDate:date options:0]; if ([calendar.selectedDates containsObject:date]) { - NSDate *previousDate = [self.gregorian dateByAddingUnit:NSCalendarUnitDay value:-1 toDate:date options:0]; - NSDate *nextDate = [self.gregorian dateByAddingUnit:NSCalendarUnitDay value:1 toDate:date options:0]; - if ([calendar.selectedDates containsObject:date]) { - if ([calendar.selectedDates containsObject:previousDate] && [calendar.selectedDates containsObject:nextDate]) { - selectionType = SelectionTypeMiddle; - } else if ([calendar.selectedDates containsObject:previousDate] && [calendar.selectedDates containsObject:date]) { - selectionType = SelectionTypeRightBorder; - } else if ([calendar.selectedDates containsObject:nextDate]) { - selectionType = SelectionTypeLeftBorder; - } else { - selectionType = SelectionTypeSingle; - } + if ([calendar.selectedDates containsObject:previousDate] && [calendar.selectedDates containsObject:nextDate]) { + selectionType = SelectionTypeMiddle; + } else if ([calendar.selectedDates containsObject:previousDate] && [calendar.selectedDates containsObject:date]) { + selectionType = SelectionTypeRightBorder; + } else if ([calendar.selectedDates containsObject:nextDate]) { + selectionType = SelectionTypeLeftBorder; + } else { + selectionType = SelectionTypeSingle; } - } else { - selectionType = SelectionTypeNone; } - - - if (selectionType == SelectionTypeNone) { - divCell.selectionLayer.hidden = YES; - return; - } - - divCell.selectionLayer.hidden = NO; - - if (selectionType == SelectionTypeMiddle) { - - divCell.selectionLayer.path = [UIBezierPath bezierPathWithRect:divCell.selectionLayer.bounds].CGPath; - - } else if (selectionType == SelectionTypeLeftBorder) { - - divCell.selectionLayer.path = [UIBezierPath bezierPathWithRoundedRect:divCell.selectionLayer.bounds byRoundingCorners:UIRectCornerTopLeft|UIRectCornerBottomLeft cornerRadii:CGSizeMake(divCell.selectionLayer.fs_width/2, divCell.selectionLayer.fs_width/2)].CGPath; - - } else if (selectionType == SelectionTypeRightBorder) { - - divCell.selectionLayer.path = [UIBezierPath bezierPathWithRoundedRect:divCell.selectionLayer.bounds byRoundingCorners:UIRectCornerTopRight|UIRectCornerBottomRight cornerRadii:CGSizeMake(divCell.selectionLayer.fs_width/2, divCell.selectionLayer.fs_width/2)].CGPath; - - } else if (selectionType == SelectionTypeSingle) { - - CGFloat diameter = MIN(divCell.selectionLayer.fs_height, divCell.selectionLayer.fs_width); - divCell.selectionLayer.path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(divCell.contentView.fs_width/2-diameter/2, divCell.contentView.fs_height/2-diameter/2, diameter, diameter)].CGPath; - - } - - - break; + } else { + selectionType = SelectionTypeNone; } - case FSCalendarMonthPositionPrevious: - case FSCalendarMonthPositionNext: { - divCell.circleImageView.hidden = YES; + + if (selectionType == SelectionTypeNone) { divCell.selectionLayer.hidden = YES; - divCell.eventIndicator.hidden = YES; // Hide default event indicator + return; + } + + divCell.selectionLayer.hidden = NO; + + if (selectionType == SelectionTypeMiddle) { + + divCell.selectionLayer.path = [UIBezierPath bezierPathWithRect:divCell.selectionLayer.bounds].CGPath; + + } else if (selectionType == SelectionTypeLeftBorder) { + + divCell.selectionLayer.path = [UIBezierPath bezierPathWithRoundedRect:divCell.selectionLayer.bounds byRoundingCorners:UIRectCornerTopLeft|UIRectCornerBottomLeft cornerRadii:CGSizeMake(divCell.selectionLayer.fs_width/2, divCell.selectionLayer.fs_width/2)].CGPath; + + } else if (selectionType == SelectionTypeRightBorder) { + + divCell.selectionLayer.path = [UIBezierPath bezierPathWithRoundedRect:divCell.selectionLayer.bounds byRoundingCorners:UIRectCornerTopRight|UIRectCornerBottomRight cornerRadii:CGSizeMake(divCell.selectionLayer.fs_width/2, divCell.selectionLayer.fs_width/2)].CGPath; + + } else if (selectionType == SelectionTypeSingle) { + + CGFloat diameter = MIN(divCell.selectionLayer.fs_height, divCell.selectionLayer.fs_width); + divCell.selectionLayer.path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(divCell.contentView.fs_width/2-diameter/2, divCell.contentView.fs_height/2-diameter/2, diameter, diameter)].CGPath; + + } + + } else if (position == FSCalendarMonthPositionNext || position == FSCalendarMonthPositionPrevious) { + + divCell.circleImageView.hidden = YES; + divCell.selectionLayer.hidden = YES; + divCell.eventIndicator.hidden = YES; // Hide default event indicator + if ([self.calendar.selectedDates containsObject:date]) { + divCell.titleLabel.textColor = self.calendar.appearance.titlePlaceholderColor; // Prevent placeholders from changing text color } - default: - break; } } @@ -182,14 +194,15 @@ typedef NS_ENUM(NSUInteger, SelectionType) { - (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated { calendar.frame = (CGRect){calendar.frame.origin,bounds.size}; + + self.eventLabel.frame = CGRectMake(0, CGRectGetMaxY(calendar.frame)+10, self.view.frame.size.width, 50); + } - (void)calendar:(FSCalendar *)calendar didSelectDate:(NSDate *)date { NSLog(@"did select date %@",[self.dateFormatter stringFromDate:date]); - [calendar reloadData]; - } - (void)calendar:(FSCalendar *)calendar didDeselectDate:(NSDate *)date diff --git a/FSCalendar/FSCalendarCalculator.m b/FSCalendar/FSCalendarCalculator.m index 0c65e61..fea6742 100644 --- a/FSCalendar/FSCalendarCalculator.m +++ b/FSCalendar/FSCalendarCalculator.m @@ -197,7 +197,7 @@ { switch (self.calendar.scope) { case FSCalendarScopeWeek: - return [self weekForSection:section]; + return [self.gregorian fs_middleDayOfWeek:[self weekForSection:section]]; case FSCalendarScopeMonth: return [self monthForSection:section]; default: diff --git a/README.md b/README.md index 00e25e8..7753525 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,8 @@ ![fscalendar-users](https://cloud.githubusercontent.com/assets/5186464/19956154/dd0f6bb4-a1c3-11e6-8fed-6aabbf999161.jpg) ## Fully DIV support -![1](https://cloud.githubusercontent.com/assets/5186464/20026796/9da4d2dc-a33c-11e6-8f21-54cd599cb939.gif) +| ![1](https://cloud.githubusercontent.com/assets/5186464/20026983/22354a0e-a342-11e6-8ae6-0614ea7f35ae.gif) | +| ------------- | ## Working with AutoLayout and Orientation