127 lines
5.1 KiB
Objective-C
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
|