WFCUUtilities.m 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. //
  2. // Utilities.m
  3. // WFChat UIKit
  4. //
  5. // Created by WF Chat on 2017/9/1.
  6. // Copyright © 2017年 WildFireChat. All rights reserved.
  7. //
  8. #import "WFCUUtilities.h"
  9. @implementation WFCUUtilities
  10. + (CGSize)getTextDrawingSize:(NSString *)text
  11. font:(UIFont *)font
  12. constrainedSize:(CGSize)constrainedSize {
  13. if (text.length <= 0) {
  14. return CGSizeZero;
  15. }
  16. if ([text respondsToSelector:@selector(boundingRectWithSize:
  17. options:
  18. attributes:
  19. context:)]) {
  20. return [text boundingRectWithSize:constrainedSize
  21. options:(NSStringDrawingTruncatesLastVisibleLine |
  22. NSStringDrawingUsesLineFragmentOrigin |
  23. NSStringDrawingUsesFontLeading)
  24. attributes:@{
  25. NSFontAttributeName : font
  26. }
  27. context:nil]
  28. .size;
  29. } else {
  30. return [text sizeWithFont:font
  31. constrainedToSize:constrainedSize
  32. lineBreakMode:NSLineBreakByTruncatingTail];
  33. }
  34. }
  35. + (NSString *)formatTimeLabel:(int64_t)timestamp {
  36. if (timestamp == 0) {
  37. return nil;
  38. }
  39. NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp/1000];
  40. NSDate *current = [[NSDate alloc] init];
  41. NSCalendar *calendar = [NSCalendar currentCalendar];
  42. NSInteger years = [calendar component:NSCalendarUnitYear fromDate:date];
  43. NSInteger curYears = [calendar component:NSCalendarUnitYear fromDate:current];
  44. if ([calendar isDateInToday:date]) {
  45. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  46. [formatter setDateFormat:@"HH:mm"];
  47. return [formatter stringFromDate:date];
  48. } else if([calendar isDateInYesterday:date]) {
  49. return @"昨天";
  50. } else {
  51. if (years == curYears) {
  52. NSInteger weeks = [calendar component:NSCalendarUnitWeekOfYear fromDate:date];
  53. NSInteger curWeeks = [calendar component:NSCalendarUnitWeekOfYear fromDate:current];
  54. NSInteger weekDays = [calendar component:NSCalendarUnitWeekday fromDate:date];
  55. if (weeks == curWeeks) {
  56. switch (weekDays) {
  57. case 1:
  58. return @"周日";
  59. break;
  60. case 2:
  61. return @"周一";
  62. break;
  63. case 3:
  64. return @"周二";
  65. break;
  66. case 4:
  67. return @"周三";
  68. break;
  69. case 5:
  70. return @"周四";
  71. break;
  72. case 6:
  73. return @"周五";
  74. break;
  75. case 7:
  76. return @"周六";
  77. break;
  78. default:
  79. break;
  80. }
  81. return [NSString stringWithFormat:@"周%ld", (long)weekDays];
  82. } else {
  83. NSInteger month = [calendar component:NSCalendarUnitMonth fromDate:date];
  84. NSInteger day = [calendar component:NSCalendarUnitDay fromDate:date];
  85. return [NSString stringWithFormat:@"%d月%d号", (int)month, (int)day];
  86. }
  87. } else {
  88. NSInteger month = [calendar component:NSCalendarUnitMonth fromDate:date];
  89. NSInteger day = [calendar component:NSCalendarUnitDay fromDate:date];
  90. return [NSString stringWithFormat:@"%d年%d月%d号",(int)years,(int)month, (int)day];
  91. }
  92. }
  93. }
  94. + (NSString *)formatTimeDetailLabel:(int64_t)timestamp {
  95. if (timestamp == 0) {
  96. return nil;
  97. }
  98. NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp/1000];
  99. NSDate *current = [[NSDate alloc] init];
  100. NSCalendar *calendar = [NSCalendar currentCalendar];
  101. NSInteger months = [calendar component:NSCalendarUnitMonth fromDate:date];
  102. NSInteger curMonths = [calendar component:NSCalendarUnitMonth fromDate:current];
  103. NSInteger years = [calendar component:NSCalendarUnitYear fromDate:date];
  104. NSInteger curYears = [calendar component:NSCalendarUnitYear fromDate:current];
  105. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  106. [formatter setDateFormat:@"HH:mm"];
  107. NSString *hourTimeStr = [formatter stringFromDate:date];
  108. NSInteger weeks = [calendar component:NSCalendarUnitWeekOfYear fromDate:date];
  109. NSInteger curWeeks = [calendar component:NSCalendarUnitWeekOfYear fromDate:current];
  110. NSInteger weekDays = [calendar component:NSCalendarUnitWeekday fromDate:date];
  111. if ([calendar isDateInToday:date]) {
  112. return hourTimeStr;
  113. } else if([calendar isDateInYesterday:date]) {
  114. return [NSString stringWithFormat:@"昨天 %@", hourTimeStr];
  115. } else if (years != curYears) {
  116. [formatter setDateFormat:@"yyyy'年'MM'月'dd'日 'HH':'mm"];
  117. return [formatter stringFromDate:date];
  118. } else if(months != curMonths) {
  119. if(weeks == curWeeks) {
  120. return [NSString stringWithFormat:@"%@ %@", [WFCUUtilities formatWeek:weekDays], hourTimeStr];
  121. }
  122. [formatter setDateFormat:@"MM'月'dd'日 'HH':'mm"];
  123. return [formatter stringFromDate:date];
  124. } else {
  125. if(weeks == curWeeks) {
  126. return [NSString stringWithFormat:@"%@ %@", [WFCUUtilities formatWeek:weekDays], hourTimeStr];
  127. }
  128. [formatter setDateFormat:@"dd'日 'HH':'mm"];
  129. return [formatter stringFromDate:date];
  130. }
  131. }
  132. + (NSString *)formatWeek:(NSUInteger)weekDays {
  133. weekDays = weekDays % 7;
  134. switch (weekDays) {
  135. case 2:
  136. return @"周一";
  137. case 3:
  138. return @"周二";
  139. case 4:
  140. return @"周三";
  141. case 5:
  142. return @"周四";
  143. case 6:
  144. return @"周五";
  145. case 0:
  146. return @"周六";
  147. case 1:
  148. return @"周日";
  149. default:
  150. break;
  151. }
  152. return nil;
  153. }
  154. + (UIImage *)thumbnailWithImage:(UIImage *)originalImage maxSize:(CGSize)size {
  155. CGSize originalsize = [originalImage size];
  156. //原图长宽均小于标准长宽的,不作处理返回原图
  157. if (originalsize.width<size.width && originalsize.height<size.height){
  158. return originalImage;
  159. }
  160. //原图长宽均大于标准长宽的,按比例缩小至最大适应值
  161. else if(originalsize.width>size.width && originalsize.height>size.height){
  162. CGFloat rate = 1.0;
  163. CGFloat widthRate = originalsize.width/size.width;
  164. CGFloat heightRate = originalsize.height/size.height;
  165. rate = widthRate>heightRate?heightRate:widthRate;
  166. CGImageRef imageRef = nil;
  167. if (heightRate>widthRate){
  168. imageRef = CGImageCreateWithImageInRect([originalImage CGImage], CGRectMake(0, originalsize.height/2-size.height*rate/2, originalsize.width, size.height*rate));//获取图片整体部分
  169. }else{
  170. imageRef = CGImageCreateWithImageInRect([originalImage CGImage], CGRectMake(originalsize.width/2-size.width*rate/2, 0, size.width*rate, originalsize.height));//获取图片整体部分
  171. }
  172. UIGraphicsBeginImageContext(size);//指定要绘画图片的大小
  173. CGContextRef con = UIGraphicsGetCurrentContext();
  174. CGContextTranslateCTM(con, 0.0, size.height);
  175. CGContextScaleCTM(con, 1.0, -1.0);
  176. CGContextDrawImage(con, CGRectMake(0, 0, size.width, size.height), imageRef);
  177. UIImage *standardImage = UIGraphicsGetImageFromCurrentImageContext();
  178. UIGraphicsEndImageContext();
  179. CGImageRelease(imageRef);
  180. return standardImage;
  181. }
  182. //原图长宽有一项大于标准长宽的,对大于标准的那一项进行裁剪,另一项保持不变
  183. else if(originalsize.height>size.height || originalsize.width>size.width){
  184. CGImageRef imageRef = nil;
  185. if(originalsize.height>size.height){
  186. imageRef = CGImageCreateWithImageInRect([originalImage CGImage], CGRectMake(0, originalsize.height/2-originalsize.width/2, originalsize.width, originalsize.width));//获取图片整体部分
  187. }
  188. else if (originalsize.width>size.width){
  189. imageRef = CGImageCreateWithImageInRect([originalImage CGImage], CGRectMake(originalsize.width/2-originalsize.height/2, 0, originalsize.height, originalsize.height));//获取图片整体部分
  190. }
  191. UIGraphicsBeginImageContext(size);//指定要绘画图片的大小
  192. CGContextRef con = UIGraphicsGetCurrentContext();
  193. CGContextTranslateCTM(con, 0.0, size.height);
  194. CGContextScaleCTM(con, 1.0, -1.0);
  195. CGContextDrawImage(con, CGRectMake(0, 0, size.width, size.height), imageRef);
  196. UIImage *standardImage = UIGraphicsGetImageFromCurrentImageContext();
  197. UIGraphicsEndImageContext();
  198. CGImageRelease(imageRef);
  199. return standardImage;
  200. }
  201. //原图为标准长宽的,不做处理
  202. else{
  203. return originalImage;
  204. }
  205. }
  206. @end