TCLiveListCell.m 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. //
  2. // TCLivePusherInfo.m
  3. // TCLVBIMDemo
  4. //
  5. // Created by lynxzhang on 16/8/3.
  6. // Copyright © 2016年 tencent. All rights reserved.
  7. //
  8. #import "TCLiveListCell.h"
  9. #import <UIImageView+WebCache.h>
  10. #import "UIImage+Additions.h"
  11. #import "TCUtil.h"
  12. #import "TCLiveListModel.h"
  13. #import "UIView+Additions.h"
  14. #import <sys/types.h>
  15. #import <sys/sysctl.h>
  16. @interface TCLiveListCell()
  17. {
  18. UIImageView *_headImageView;
  19. UIImageView *_bigPicView;
  20. UIImageView *_flagView;
  21. UILabel *_titleLabel;
  22. UILabel *_nameLabel;
  23. UILabel *_locationLabel;
  24. UILabel *_timeLable;
  25. UILabel *_reviewLabel;
  26. UIView *_userMsgView;
  27. UIView *_lineView;
  28. UIImage *_defaultImage;
  29. CGRect _titleRect;
  30. }
  31. @end
  32. @implementation TCLiveListCell
  33. - (instancetype)initWithFrame:(CGRect)frame
  34. {
  35. self = [super initWithFrame:frame];
  36. if (self) {
  37. [self initUIForUGC];
  38. }
  39. return self;
  40. }
  41. -(void)layoutSubviews{
  42. [super layoutSubviews];
  43. [self layoutForUGC];
  44. }
  45. - (void)prepareForReuse
  46. {
  47. [super prepareForReuse];
  48. [_headImageView sd_setImageWithURL:nil];
  49. [_bigPicView sd_setImageWithURL:nil];
  50. }
  51. - (void)initUIForUGC {
  52. for (UIView *view in self.contentView.subviews) {
  53. [view removeFromSuperview];
  54. }
  55. self.contentView.backgroundColor = [UIColor clearColor];
  56. //背景图
  57. _bigPicView = [[UIImageView alloc] initWithFrame:CGRectZero];
  58. _bigPicView.contentMode = UIViewContentModeScaleAspectFill;
  59. _bigPicView.clipsToBounds = YES;
  60. [self.contentView addSubview:_bigPicView];
  61. //左上角的审核状态
  62. _reviewLabel = [[UILabel alloc] initWithFrame:CGRectZero];
  63. [_reviewLabel setFont:[UIFont systemFontOfSize:14]];
  64. [_reviewLabel setTextColor:[UIColor whiteColor]];
  65. [self.contentView addSubview:_reviewLabel];
  66. //右上角的时间
  67. _timeLable = [[UILabel alloc] initWithFrame:CGRectZero];
  68. [_timeLable setFont:[UIFont systemFontOfSize:12]];
  69. [_timeLable setTextColor:UIColorFromRGB(0xFFFFFF)];
  70. [_timeLable setTextAlignment:NSTextAlignmentCenter];
  71. [self.contentView addSubview:_timeLable];
  72. //用户信息
  73. _userMsgView = [[UIView alloc] initWithFrame:CGRectZero];
  74. _userMsgView.backgroundColor = [UIColor clearColor];
  75. [self.contentView addSubview:_userMsgView];
  76. //头像
  77. _headImageView = [[UIImageView alloc] initWithFrame:CGRectZero];
  78. [_userMsgView addSubview:_headImageView];
  79. //用户名
  80. _nameLabel = [[UILabel alloc] initWithFrame:CGRectZero];
  81. [_nameLabel setFont:[UIFont systemFontOfSize:14]];
  82. [_nameLabel setTextColor:[UIColor whiteColor]];
  83. [_userMsgView addSubview:_nameLabel];
  84. if (_defaultImage == nil) {
  85. _defaultImage = [self scaleClipImage:[UIImage imageNamed:@"bg.jpg"] clipW: [UIScreen mainScreen].bounds.size.width * 2 clipH:274 * 2 ];
  86. }
  87. }
  88. - (void)layoutForUGC {
  89. //背景图
  90. _bigPicView.frame = CGRectMake(0 , 0.5, self.width, self.height - 1);
  91. //左上角的审核状态
  92. _reviewLabel.frame = CGRectMake(14, 5, 62, 20);
  93. //右上角的时间
  94. _timeLable.frame = CGRectMake(self.width - _timeLable.frame.size.width-5, 5, _timeLable.frame.size.width, 20);
  95. //用户信息
  96. _userMsgView.frame = CGRectMake(0, _bigPicView.bottom - 50, self.width, 50);
  97. //line
  98. _lineView.frame = CGRectMake(0, _userMsgView.height - 1, _userMsgView.width, 1);
  99. //头像
  100. _headImageView.frame = CGRectMake(14, 7.5, 35, 35);
  101. _headImageView.layer.cornerRadius = _headImageView.height * 0.5;
  102. _headImageView.layer.masksToBounds = YES;
  103. _headImageView.layer.borderWidth = 1;
  104. _headImageView.layer.borderColor = kClearColor.CGColor;
  105. //用户名
  106. _nameLabel.frame = CGRectMake(_headImageView.right + 12, 18, self.width - _headImageView.right - 12, 14);
  107. }
  108. - (void)setModel:(TCLiveInfo *)model {
  109. _model = model;
  110. NSStringCheck(_model.userinfo.headpic);
  111. [_headImageView sd_setImageWithURL:[NSURL URLWithString:[TCUtil transImageURL2HttpsURL:_model.userinfo.headpic]]
  112. placeholderImage:[UIImage imageNamed:@"face"]];
  113. if (_reviewLabel){
  114. if (_model.reviewStatus == 0) {
  115. _reviewLabel.text = NSLocalizedString(@"TCLiveListView.Uncensored", nil);
  116. }
  117. else if(_model.reviewStatus == 1){
  118. _reviewLabel.text = NSLocalizedString(@"TCLiveListView.Censored", nil);
  119. }
  120. else if(_model.reviewStatus == 2){
  121. _reviewLabel.text = NSLocalizedString(@"TCLiveListView.AdultContent", nil);
  122. }
  123. }
  124. NSStringCheck(_model.title);
  125. NSMutableAttributedString *title = [[NSMutableAttributedString alloc] initWithString:_model.title];
  126. [title addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:18] range:NSMakeRange(0, title.length)];
  127. _titleRect = [title boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, 15) options:NSStringDrawingUsesLineFragmentOrigin context:nil];
  128. if (_titleLabel) _titleLabel.attributedText = title;
  129. NSMutableString* name = [[NSMutableString alloc] initWithString:@""];
  130. NSStringCheck(_model.userinfo.nickname);
  131. if (0 == _model.userinfo.nickname.length) {
  132. [name appendString:_model.userid];
  133. }
  134. else {
  135. [name appendString:_model.userinfo.nickname];
  136. }
  137. if (_nameLabel) _nameLabel.text = name;
  138. if (_locationLabel) _locationLabel.text = _model.userinfo.location;
  139. //self.locationImageView.hidden = NO;
  140. if (_locationLabel && _locationLabel.text.length == 0) {
  141. _locationLabel.text = NSLocalizedString(@"TCLiveListCell.HideLocation", nil);
  142. }
  143. __weak typeof(_bigPicView) weakPicView = _bigPicView;
  144. [_bigPicView sd_setImageWithURL:[NSURL URLWithString:[TCUtil transImageURL2HttpsURL:model.userinfo.frontcover]] placeholderImage:_defaultImage completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
  145. // UIImage *newImage = [self scaleClipImage:image clipW:_bigPicView.width clipH:_bigPicView.height];
  146. if (image != nil) {
  147. weakPicView.image = image;
  148. model.userinfo.frontcoverImage = image;
  149. }
  150. }];
  151. if (_flagView) {
  152. _flagView.image = [UIImage imageNamed:@"playback"];
  153. }
  154. if (_timeLable) {
  155. [self setTimeLable:_model.timestamp];
  156. }
  157. [self layoutForUGC];
  158. }
  159. -(TCLiveInfo *)model{
  160. _model.userinfo.frontcoverImage = _bigPicView.image;
  161. return _model;
  162. }
  163. -(UIImage *)scaleClipImage:(UIImage *)image clipW:(CGFloat)clipW clipH:(CGFloat)clipH{
  164. UIImage *newImage = nil;
  165. if (image != nil) {
  166. if (image.size.width >= clipW && image.size.height >= clipH) {
  167. newImage = [self clipImage:image inRect:CGRectMake((image.size.width - clipW)/2, (image.size.height - clipH)/2, clipW,clipH)];
  168. }else{
  169. CGFloat widthRatio = clipW / image.size.width;
  170. CGFloat heightRatio = clipH / image.size.height;
  171. CGFloat imageNewHeight = 0;
  172. CGFloat imageNewWidth = 0;
  173. UIImage *scaleImage = nil;
  174. if (widthRatio < heightRatio) {
  175. imageNewHeight = clipH;
  176. imageNewWidth = imageNewHeight * image.size.width / image.size.height;
  177. scaleImage = [self scaleImage:image scaleToSize:CGSizeMake(imageNewWidth, imageNewHeight)];
  178. }else{
  179. imageNewWidth = clipW;
  180. imageNewHeight = imageNewWidth * image.size.height / image.size.width;
  181. scaleImage = [self scaleImage:image scaleToSize:CGSizeMake(imageNewWidth, imageNewHeight)];
  182. }
  183. newImage = [self clipImage:image inRect:CGRectMake((scaleImage.size.width - clipW)/2, (scaleImage.size.height - clipH)/2, clipW,clipH)];
  184. }
  185. }
  186. return newImage;
  187. }
  188. /**
  189. *缩放图片
  190. */
  191. -(UIImage*)scaleImage:(UIImage *)image scaleToSize:(CGSize)size{
  192. UIGraphicsBeginImageContext(size);
  193. [image drawInRect:CGRectMake(0, 0, size.width, size.height)];
  194. UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
  195. UIGraphicsEndImageContext();
  196. return scaledImage;
  197. }
  198. /**
  199. *裁剪图片
  200. */
  201. -(UIImage *)clipImage:(UIImage *)image inRect:(CGRect)rect{
  202. CGImageRef sourceImageRef = [image CGImage];
  203. CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, rect);
  204. UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
  205. CGImageRelease(newImageRef);
  206. return newImage;
  207. }
  208. - (NSString *)localizedNumber:(int)number key:(NSString *)key {
  209. if (number > 1) {
  210. key = [key stringByAppendingString:@"Plur"];
  211. }
  212. return [[NSString alloc] initWithFormat:NSLocalizedString(key, nil), number];
  213. }
  214. - (void)setTimeLable:(int)timestamp {
  215. NSString *timeStr = NSLocalizedString(@"TCLiveListCell.TimeSecondsAgo", nil);
  216. if (timestamp == 0) {
  217. timeStr = @"";
  218. } else {
  219. int interval = [[NSDate date] timeIntervalSince1970] - timestamp;
  220. if (interval >= 60 && interval < 3600) {
  221. timeStr = [self localizedNumber:interval/60 key:@"TCLiveListCell.TimeMinutesAgo"];
  222. } else if (interval >= 3600 && interval < 60*60*24) {
  223. timeStr = [self localizedNumber:interval/3600 key:@"TCLiveListCell.TimeHoursAgo"];
  224. } else if (interval >= 60*60*24 && interval < 60*60*24*365) {
  225. timeStr = [self localizedNumber:interval/3600/24 key:@"TCLiveListCell.TimeDaysAgo"];
  226. } else if (interval >= 60*60*24*365) {
  227. timeStr = [[NSString alloc] initWithFormat:NSLocalizedString(@"TCLiveListCell.TimeLongAgo", nil)];
  228. }
  229. }
  230. _timeLable.text = timeStr;
  231. [_timeLable sizeToFit];
  232. }
  233. @end