WFCUUtilities.m 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  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 days = [calendar component:NSCalendarUnitDay fromDate:date];
  43. NSInteger curDays = [calendar component:NSCalendarUnitDay fromDate:current];
  44. if (days == curDays) {
  45. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  46. [formatter setDateFormat:@"HH:mm"];
  47. return [formatter stringFromDate:date];
  48. } else if(days == curDays -1) {
  49. return @"昨天";
  50. } else {
  51. NSInteger weeks = [calendar component:NSCalendarUnitWeekOfYear fromDate:date];
  52. NSInteger curWeeks = [calendar component:NSCalendarUnitWeekOfYear fromDate:current];
  53. NSInteger weekDays = [calendar component:NSCalendarUnitWeekday fromDate:date];
  54. if (weeks == curWeeks) {
  55. switch (weekDays) {
  56. case 1:
  57. return @"周日";
  58. break;
  59. case 2:
  60. return @"周一";
  61. break;
  62. case 3:
  63. return @"周二";
  64. break;
  65. case 4:
  66. return @"周三";
  67. break;
  68. case 5:
  69. return @"周四";
  70. break;
  71. case 6:
  72. return @"周五";
  73. break;
  74. case 7:
  75. return @"周六";
  76. break;
  77. default:
  78. break;
  79. }
  80. return [NSString stringWithFormat:@"周%ld", (long)weekDays];
  81. } else {
  82. NSInteger month = [calendar component:NSCalendarUnitMonth fromDate:date];
  83. NSInteger day = [calendar component:NSCalendarUnitDay fromDate:date];
  84. return [NSString stringWithFormat:@"%d月%d号", (int)month, (int)day];
  85. }
  86. }
  87. }
  88. + (NSString *)formatTimeDetailLabel:(int64_t)timestamp {
  89. if (timestamp == 0) {
  90. return nil;
  91. }
  92. NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp/1000];
  93. NSDate *current = [[NSDate alloc] init];
  94. NSCalendar *calendar = [NSCalendar currentCalendar];
  95. NSInteger days = [calendar component:NSCalendarUnitDay fromDate:date];
  96. NSInteger curDays = [calendar component:NSCalendarUnitDay fromDate:current];
  97. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  98. [formatter setDateFormat:@"HH:mm"];
  99. NSString *time = [formatter stringFromDate:date];
  100. if (days == curDays) {
  101. return time;
  102. } else if(days == curDays -1) {
  103. return [NSString stringWithFormat:@"昨天 %@", time];
  104. } else {
  105. NSInteger weeks = [calendar component:NSCalendarUnitWeekOfYear fromDate:date];
  106. NSInteger curWeeks = [calendar component:NSCalendarUnitWeekOfYear fromDate:current];
  107. NSInteger weekDays = [calendar component:NSCalendarUnitWeekday fromDate:date];
  108. if (weeks == curWeeks) {
  109. return [NSString stringWithFormat:@"%@ %@", [WFCUUtilities formatWeek:weekDays], time];
  110. } /*else if (weeks == curWeeks - 1) {
  111. if (weekDays == 1) {
  112. return [NSString stringWithFormat:@"%@ %@", [Utilities formatWeek:weekDays], time];
  113. } else {
  114. return [NSString stringWithFormat:@"上%@ %@", [Utilities formatWeek:weekDays], time];
  115. }
  116. }*/ else {
  117. NSInteger year = [calendar component:NSCalendarUnitYear fromDate:date];
  118. NSInteger curYear = [calendar component:NSCalendarUnitYear fromDate:current];
  119. NSInteger month = [calendar component:NSCalendarUnitMonth fromDate:date];
  120. NSInteger curMonth = [calendar component:NSCalendarUnitMonth fromDate:current];
  121. if (month == curMonth) {
  122. [formatter setDateFormat:@"dd'日'HH':'mm"];
  123. return [formatter stringFromDate:date];
  124. } else if (year == curYear) {
  125. [formatter setDateFormat:@"MM'月'dd'日'HH':'mm"];
  126. return [formatter stringFromDate:date];
  127. } else {
  128. [formatter setDateFormat:@"yyyy'年'MM'月'dd'日'HH':'mm"];
  129. return [formatter stringFromDate:date];
  130. }
  131. }
  132. }
  133. }
  134. + (NSString *)formatWeek:(NSUInteger)weekDays {
  135. weekDays = weekDays % 7;
  136. switch (weekDays) {
  137. case 2:
  138. return @"周一";
  139. case 3:
  140. return @"周二";
  141. case 4:
  142. return @"周三";
  143. case 5:
  144. return @"周四";
  145. case 6:
  146. return @"周五";
  147. case 0:
  148. return @"周六";
  149. case 1:
  150. return @"周日";
  151. default:
  152. break;
  153. }
  154. return nil;
  155. }
  156. + (UIImage *)thumbnailWithImage:(UIImage *)originalImage maxSize:(CGSize)size {
  157. CGSize originalsize = [originalImage size];
  158. //原图长宽均小于标准长宽的,不作处理返回原图
  159. if (originalsize.width<size.width && originalsize.height<size.height){
  160. return originalImage;
  161. }
  162. //原图长宽均大于标准长宽的,按比例缩小至最大适应值
  163. else if(originalsize.width>size.width && originalsize.height>size.height){
  164. CGFloat rate = 1.0;
  165. CGFloat widthRate = originalsize.width/size.width;
  166. CGFloat heightRate = originalsize.height/size.height;
  167. rate = widthRate>heightRate?heightRate:widthRate;
  168. CGImageRef imageRef = nil;
  169. if (heightRate>widthRate){
  170. imageRef = CGImageCreateWithImageInRect([originalImage CGImage], CGRectMake(0, originalsize.height/2-size.height*rate/2, originalsize.width, size.height*rate));//获取图片整体部分
  171. }else{
  172. imageRef = CGImageCreateWithImageInRect([originalImage CGImage], CGRectMake(originalsize.width/2-size.width*rate/2, 0, size.width*rate, originalsize.height));//获取图片整体部分
  173. }
  174. UIGraphicsBeginImageContext(size);//指定要绘画图片的大小
  175. CGContextRef con = UIGraphicsGetCurrentContext();
  176. CGContextTranslateCTM(con, 0.0, size.height);
  177. CGContextScaleCTM(con, 1.0, -1.0);
  178. CGContextDrawImage(con, CGRectMake(0, 0, size.width, size.height), imageRef);
  179. UIImage *standardImage = UIGraphicsGetImageFromCurrentImageContext();
  180. UIGraphicsEndImageContext();
  181. CGImageRelease(imageRef);
  182. return standardImage;
  183. }
  184. //原图长宽有一项大于标准长宽的,对大于标准的那一项进行裁剪,另一项保持不变
  185. else if(originalsize.height>size.height || originalsize.width>size.width){
  186. CGImageRef imageRef = nil;
  187. if(originalsize.height>size.height){
  188. imageRef = CGImageCreateWithImageInRect([originalImage CGImage], CGRectMake(0, originalsize.height/2-originalsize.width/2, originalsize.width, originalsize.width));//获取图片整体部分
  189. }
  190. else if (originalsize.width>size.width){
  191. imageRef = CGImageCreateWithImageInRect([originalImage CGImage], CGRectMake(originalsize.width/2-originalsize.height/2, 0, originalsize.height, originalsize.height));//获取图片整体部分
  192. }
  193. UIGraphicsBeginImageContext(size);//指定要绘画图片的大小
  194. CGContextRef con = UIGraphicsGetCurrentContext();
  195. CGContextTranslateCTM(con, 0.0, size.height);
  196. CGContextScaleCTM(con, 1.0, -1.0);
  197. CGContextDrawImage(con, CGRectMake(0, 0, size.width, size.height), imageRef);
  198. UIImage *standardImage = UIGraphicsGetImageFromCurrentImageContext();
  199. UIGraphicsEndImageContext();
  200. CGImageRelease(imageRef);
  201. return standardImage;
  202. }
  203. //原图为标准长宽的,不做处理
  204. else{
  205. return originalImage;
  206. }
  207. }
  208. @end