FSCalendar/Example-TodayExtension/TodayExtension/TodayViewController.m

127 lines
5.1 KiB
Objective-C

//
// TodayViewController.m
// Example-TodayExtension
//
// Created by dingwenchao on 9/6/16.
// Copyright © 2016 dingwenchao. All rights reserved.
//
#import "TodayViewController.h"
#import <NotificationCenter/NotificationCenter.h>
#import "FSCalendar.h"
@interface TodayViewController () <NCWidgetProviding,FSCalendarDataSource,FSCalendarDelegate,FSCalendarDelegateAppearance>
@property (weak , nonatomic) IBOutlet FSCalendar *calendar;
@property (weak , nonatomic) IBOutlet UIButton *prevButton;
@property (weak , nonatomic) IBOutlet UIButton *nextButton;
@property (weak , nonatomic) IBOutlet NSLayoutConstraint *calendarHeight;
@property (strong, nonatomic) NSCalendar *gregorian;
@property (strong, nonatomic) NSCalendar *lunarCalendar;
@property (strong, nonatomic) NSArray<NSString *> *lunarChars;
@end
@implementation TodayViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
self.calendar.today = nil;
self.calendar.locale = [NSLocale localeWithLocaleIdentifier:@"zh-CN"];
self.calendar.adjustsBoundingRectWhenChangingMonths = NO;
self.calendar.placeholderType = FSCalendarPlaceholderTypeNone;
self.calendar.appearance.headerMinimumDissolvedAlpha = 0;
self.lunarCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];
self.lunarCalendar.locale = [NSLocale localeWithLocaleIdentifier:@"zh-CN"];
self.lunarChars = @[@"初一",@"初二",@"初三",@"初四",@"初五",@"初六",@"初七",@"初八",@"初九",@"初十",@"十一",@"十二",@"十三",@"十四",@"十五",@"十六",@"十七",@"十八",@"十九",@"二十",@"二一",@"二二",@"二三",@"二四",@"二五",@"二六",@"二七",@"二八",@"二九",@"三十"];
self.gregorian = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
if ([self.extensionContext respondsToSelector:@selector(setWidgetLargestAvailableDisplayMode:)]) {
self.extensionContext.widgetLargestAvailableDisplayMode = NCWidgetDisplayModeExpanded;
} else {
self.preferredContentSize = CGSizeMake(0, self.calendarHeight.constant);
}
}
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize
{
if (activeDisplayMode == NCWidgetDisplayModeCompact) {
[self.calendar setScope:FSCalendarScopeWeek animated:YES];
self.preferredContentSize = maxSize;
} else if (activeDisplayMode == NCWidgetDisplayModeExpanded) {
[self.calendar setScope:FSCalendarScopeMonth animated:YES];
self.preferredContentSize = CGSizeMake(maxSize.width, self.calendarHeight.constant);
}
}
- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler
{
// Perform any setup necessary in order to update the view.
// If an error is encountered, use NCUpdateResultFailed
// If there's no update required, use NCUpdateResultNoData
// If there's an update, use NCUpdateResultNewData
completionHandler(NCUpdateResultNewData);
}
- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets
{
return UIEdgeInsetsZero;
}
- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated
{
self.calendarHeight.constant = CGRectGetHeight(bounds);
[self.view layoutIfNeeded];
self.preferredContentSize = CGSizeMake(calendar.frame.size.width, self.calendarHeight.constant);
}
- (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance borderDefaultColorForDate:(NSDate *)date
{
return [self.gregorian isDateInToday:date] ? appearance.todayColor : nil;
}
- (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance fillSelectionColorForDate:(NSDate *)date
{
return [UIColor clearColor];
}
- (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance borderSelectionColorForDate:(NSDate *)date
{
return appearance.selectionColor;
}
- (NSString *)calendar:(FSCalendar *)calendar subtitleForDate:(NSDate *)date
{
NSInteger day = [_lunarCalendar components:NSCalendarUnitDay fromDate:date].day;
return _lunarChars[day-1];
}
- (void)calendar:(FSCalendar *)calendar didSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition
{
if (monthPosition != FSCalendarMonthPositionCurrent) {
[calendar setCurrentPage:date animated:YES];
}
}
- (IBAction)prevClicked:(id)sender
{
NSCalendarUnit unit = (self.calendar.scope==FSCalendarScopeMonth) ? NSCalendarUnitMonth : NSCalendarUnitWeekOfYear;
NSDate *prevPage = [self.gregorian dateByAddingUnit:unit value:-1 toDate:self.calendar.currentPage options:0];
[self.calendar setCurrentPage:prevPage animated:YES];
}
- (IBAction)nextClicked:(id)sender
{
NSCalendarUnit unit = (self.calendar.scope==FSCalendarScopeMonth) ? NSCalendarUnitMonth : NSCalendarUnitWeekOfYear;
NSDate *nextPage = [self.gregorian dateByAddingUnit:unit value:1 toDate:self.calendar.currentPage options:0];
[self.calendar setCurrentPage:nextPage animated:YES];
}
@end