LBCalendarMonthWeekDaysView.m 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. //
  2. // LBCalendarMonthWeekDaysView.m
  3. // Calendar module
  4. //
  5. // Created by king on 1511-4-308.
  6. // Copyright © 2015年 luqinbin. All rights reserved.
  7. //
  8. #import "LBCalendarMonthWeekDaysView.h"
  9. @implementation LBCalendarMonthWeekDaysView
  10. static NSArray *cacheDaysOfWeeks;
  11. - (instancetype)initWithFrame:(CGRect)frame
  12. {
  13. self = [super initWithFrame:frame];
  14. if(!self){
  15. return nil;
  16. }
  17. [self commonInit];
  18. return self;
  19. }
  20. - (id)initWithCoder:(NSCoder *)aDecoder
  21. {
  22. self = [super initWithCoder:aDecoder];
  23. if(!self){
  24. return nil;
  25. }
  26. [self commonInit];
  27. return self;
  28. }
  29. - (void)commonInit
  30. {
  31. for(NSString *day in [self daysOfWeek]){
  32. UILabel *view = [UILabel new];
  33. view.font = self.calendarManager.calendarAppearance.weekDayTextFont;
  34. view.textColor = self.calendarManager.calendarAppearance.weekDayTextColor;
  35. view.textAlignment = NSTextAlignmentCenter;
  36. view.text = day;
  37. [self addSubview:view];
  38. }
  39. }
  40. - (NSArray *)daysOfWeek
  41. {
  42. if(cacheDaysOfWeeks){
  43. return cacheDaysOfWeeks;
  44. }
  45. NSDateFormatter *dateFormatter = [NSDateFormatter new];
  46. NSMutableArray *days = [[dateFormatter standaloneWeekdaySymbols] mutableCopy];
  47. {
  48. NSCalendar *calendar = self.calendarManager.calendarAppearance.calendar;
  49. NSUInteger firstWeekday = (calendar.firstWeekday + 6) % 7; // Sunday == 1, Saturday == 7
  50. for(int i = 0; i < firstWeekday; ++i){
  51. id day = [days firstObject];
  52. [days removeObjectAtIndex:0];
  53. [days addObject:day];
  54. }
  55. }
  56. switch(self.calendarManager.calendarAppearance.weekDayFormat){
  57. case LBCalendarWeekDayFormatSingle:
  58. for(NSInteger i = 0; i < days.count; ++i){
  59. NSString *day = days[i];
  60. [days replaceObjectAtIndex:i withObject:[[day uppercaseString] substringToIndex:1]];
  61. }
  62. break;
  63. case LBCalendarWeekDayFormatShort:
  64. for(NSInteger i = 0; i < days.count; ++i){
  65. NSString *day = days[i];
  66. [days replaceObjectAtIndex:i withObject:[[day uppercaseString] substringToIndex:3]];
  67. }
  68. break;
  69. case LBCalendarWeekDayFormatFull:
  70. for(NSInteger i = 0; i < days.count; ++i){
  71. NSString *day = days[i];
  72. [days replaceObjectAtIndex:i withObject:[day uppercaseString]];
  73. }
  74. break;
  75. }
  76. cacheDaysOfWeeks = days;
  77. return cacheDaysOfWeeks;
  78. }
  79. - (void)layoutSubviews
  80. {
  81. CGFloat x = 0;
  82. CGFloat width = self.frame.size.width / 7.;
  83. CGFloat height = self.frame.size.height;
  84. for(UIView *view in self.subviews){
  85. view.frame = CGRectMake(x, 0, width, height);
  86. x = CGRectGetMaxX(view.frame);
  87. }
  88. }
  89. + (void)beforeReloadAppearance
  90. {
  91. cacheDaysOfWeeks = nil;
  92. }
  93. - (void)reloadAppearance
  94. {
  95. for(int i = 0; i < self.subviews.count; ++i){
  96. UILabel *view = [self.subviews objectAtIndex:i];
  97. view.font = self.calendarManager.calendarAppearance.weekDayTextFont;
  98. view.textColor = self.calendarManager.calendarAppearance.weekDayTextColor;
  99. view.text = [[self daysOfWeek] objectAtIndex:i];
  100. }
  101. }
  102. @end