仿微信朋友圈以及新浪微博
来源:互联网 发布:面料成衣模拟软件 编辑:程序博客网 时间:2024/05/21 20:24
难点:由于有视频,语音,地理位置,文字,图片等不同的数据类型,所以相对来说布局叫复杂
主要的思路是:在获取数据的同时,计算好每个cell的布局,高度
1.数据类
@interface ShareInfoDemo : NSObject
@property(nonatomic,strong)NSString *idNum;
@property(nonatomic,strong)NSString *type;
@property(nonatomic,strong)NSString *content;
@property(nonatomic,strong)NSArray *referUris;
@property(nonatomic,strong)NSString *duration;
@property(nonatomic,strong)NSString *sendTime;
@property(nonatomic,strong)SelfDataModel *user;
@property(nonatomic,strong)NSMutableDictionary *replyPage;
@property(nonatomic,strong)NSMutableDictionary *zans;
@property(nonatomic,strong)NSString *location;
@property(nonatomic,assign)bool hasShowAll;
@end
2.计算每个cell
@interface ShareInfoFrame : NSObject
@property(nonatomic,strong)ShareInfoDemo *shareInfo;
@property(nonatomic,assign)CGRect iconImageFrame;
@property(nonatomic,assign)CGRect nameFrame;
@property(nonatomic,assign)CGRect contentFrame;
@property(nonatomic,strong)NSMutableArray * imageViewFArr;
@property(nonatomic,assign)CGRect mapFrame;
@property(nonatomic,assign)CGRect playviewFrame;
@property(nonatomic,assign)CGRect timeFrame;
@property(nonatomic,assign)CGRect blogToolBarF;
@property(nonatomic,strong)NSMutableArray *responseViewHeightArr;
@property(nonatomic,assign)CGFloat cellHeight;
@property(nonatomic,assign)CGRect zanFrame;
@property(nonatomic,assign)CGRect playSoundFrame;
@property(nonatomic,assign)CGRect delectFrame;
@property(nonatomic,assign)CGRect showAllFrame;
@end
//// ShareInfoFrame.m //// Created by yinbo on 2016/11/16.// Copyright © 2016年 yinbo. All rights reserved.//#import "ShareInfoFrame.h"@implementation ShareInfoFrame-(NSDictionary *)parseJSONStringToNSDictionary:(NSString *)JSONString { NSData *JSONData = [JSONString dataUsingEncoding:NSUTF8StringEncoding]; NSDictionary *responseJSON = [NSJSONSerialization JSONObjectWithData:JSONData options:NSJSONReadingMutableLeaves error:nil]; return responseJSON;}-(void)setShareInfo:(ShareInfoDemo *)shareInfo{ _shareInfo=shareInfo; self.imageViewFArr=[[NSMutableArray alloc]initWithCapacity:0]; self.responseViewHeightArr=[[NSMutableArray alloc]initWithCapacity:0]; //头像的Frame CGFloat iconX = 20; CGFloat iconY = 20; CGFloat iconW = 40; CGFloat iconH = 40; self.iconImageFrame=CGRectMake(iconX, iconY, iconW, iconH); //名字的Frame CGFloat nameX = 70; CGFloat nameY = 20; CGFloat nameW = YBScreenBoundsWidth-90; CGFloat nameH =15; self.nameFrame = CGRectMake(nameX, nameY, nameW, nameH); //文字内容的Frame CGFloat contentX=70; CGFloat contentY=40; CGFloat contentW=YBScreenBoundsWidth-90; CGSize size1 = CGSizeMake(YBScreenBoundsWidth-90, MAXFLOAT); NSDictionary *dict = @{NSFontAttributeName:ContentFont}; CGSize size2 =[self.shareInfo.content boundingRectWithSize:size1 options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil].size; CGFloat contentH = size2.height; self.contentFrame=CGRectMake(contentX, contentY, contentW, contentH); if (contentH>90) { if (!self.shareInfo.hasShowAll) { self.contentFrame=CGRectMake(contentX, contentY, contentW, 90); } } //富文本内容的Frame// bool isOver=NO;// if (size2.height+40<60) {// isOver=NO;// }else{// isOver=YES;// } if ([self.shareInfo.type isEqualToString:@"TEXT"]) { if([self.shareInfo.content containsString:@"{"]){ NSDictionary *dic=[self parseJSONStringToNSDictionary:self.shareInfo.content]; //文字内容的Frame CGFloat contentX=70; CGFloat contentY=40; CGFloat contentW=YBScreenBoundsWidth-90; CGSize size1 = CGSizeMake(YBScreenBoundsWidth-90, MAXFLOAT); NSDictionary *dict = @{NSFontAttributeName:ContentFont}; CGSize size2 =[[NSString stringWithFormat:@"%@%@",dic[@"user"][@"name"],dic[@"message"]] boundingRectWithSize:size1 options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil].size; CGFloat contentH = size2.height; self.contentFrame=CGRectMake(contentX, contentY, contentW, contentH);// if (contentH>90) {// if (!self.shareInfo.hasShowAll) {// self.contentFrame=CGRectMake(contentX, contentY, contentW, 90);// }// } } self.timeFrame=CGRectMake(70, CGRectGetMaxY(self.contentFrame)+10, 60,20); self.blogToolBarF=CGRectMake(YBScreenBoundsWidth-20-22, CGRectGetMaxY(self.contentFrame)+10, 22, 13); NSMutableString *mstr=[[NSMutableString alloc]initWithCapacity:0]; for (int i=0; i<self.shareInfo.zans.allValues.count; i++) { if (i==0) { [mstr appendString:[NSString stringWithFormat:@"❤️%@ ",self.shareInfo.zans.allValues[0]]]; }else{ [mstr appendString:[NSString stringWithFormat:@" %@",self.shareInfo.zans.allValues[i]]]; } } CGSize size3 = CGSizeMake(YBScreenBoundsWidth-90, MAXFLOAT); NSDictionary *dict = @{NSFontAttributeName:ResponseContentFont}; CGSize size4 = [mstr boundingRectWithSize:size3 options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:dict context:nil].size; self.zanFrame=CGRectMake(70,CGRectGetMaxY(self.timeFrame), YBScreenBoundsWidth-90, size4.height); NSArray *listArr=self.shareInfo.replyPage[@"list"]; if (![listArr isKindOfClass:[NSNull class]]) { for (int i=0; i<listArr.count; i++) { if (i==0) { NSDictionary *dic=listArr[i]; NSString* strAfterDecodeByUTF8AndURI = [dic[@"content"] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString *contentstr=[NSString stringWithFormat:@"%@回复:%@",dic[@"replyer"][@"name"], strAfterDecodeByUTF8AndURI]; CGFloat contentRepX=70; CGFloat contentRepY; if (self.shareInfo.zans.allKeys.count==0) { contentRepY=CGRectGetMaxY(self.timeFrame)+10; }else{ contentRepY=CGRectGetMaxY(self.zanFrame)+10; } CGFloat contentRepW=YBScreenBoundsWidth-90; CGSize size3 = CGSizeMake(YBScreenBoundsWidth-90, MAXFLOAT); NSDictionary *dict = @{NSFontAttributeName:ResponseContentFont}; CGSize size4 = [contentstr boundingRectWithSize:size3 options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:dict context:nil].size; CGFloat contentRepH=size4.height; CGRect rect=CGRectMake(contentRepX, contentRepY, contentRepW, contentRepH); NSValue *value = [NSValue valueWithCGRect:rect]; [self.responseViewHeightArr addObject:value]; }else{ NSDictionary *dic=listArr[i]; NSValue *value=[self.responseViewHeightArr objectAtIndex:i-1]; CGRect lastrect=[value CGRectValue]; NSString* strAfterDecodeByUTF8AndURI = [dic[@"content"] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString *contentstr=[NSString stringWithFormat:@"%@回复:%@",dic[@"replyer"][@"name"],strAfterDecodeByUTF8AndURI]; CGFloat contentRepX=70; CGFloat contentRepY=CGRectGetMaxY(lastrect)+10; CGFloat contentRepW=YBScreenBoundsWidth-90; CGSize size3 = CGSizeMake(YBScreenBoundsWidth-90, MAXFLOAT); NSDictionary *dict = @{NSFontAttributeName:ResponseContentFont}; CGSize size4 = [contentstr boundingRectWithSize:size3 options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:dict context:nil].size; CGFloat contentRepH=size4.height; CGRect rect=CGRectMake(contentRepX, contentRepY, contentRepW, contentRepH); NSValue *value2 = [NSValue valueWithCGRect:rect]; [self.responseViewHeightArr addObject:value2]; } } } } if ([self.shareInfo.type isEqualToString:@"SOUND"]) {// if ([self.shareInfo.duration intValue]<16) {// self.playSoundFrame=CGRectMake(70,CGRectGetMaxY(self.contentFrame)+10, (YBScreenBoundsWidth-90)/16*[self.shareInfo.duration intValue], 25);// }else{// self.playSoundFrame=CGRectMake(70,CGRectGetMaxY(self.contentFrame)+10, (YBScreenBoundsWidth-90), 25);// } self.playSoundFrame=CGRectMake(70, CGRectGetMaxY(self.contentFrame),100, 25); self.timeFrame=CGRectMake(70, CGRectGetMaxY(self.playSoundFrame)+10, 100,20); self.blogToolBarF=CGRectMake(YBScreenBoundsWidth-20-22, CGRectGetMaxY(self.playSoundFrame)+10, 22, 13); NSMutableString *mstr=[[NSMutableString alloc]initWithCapacity:0]; for (int i=0; i<self.shareInfo.zans.allValues.count; i++) { if (i==0) { [mstr appendString:[NSString stringWithFormat:@"❤️%@ ",self.shareInfo.zans.allValues[0]]]; }else{ [mstr appendString:[NSString stringWithFormat:@" %@",self.shareInfo.zans.allValues[i]]]; } } CGSize size3 = CGSizeMake(YBScreenBoundsWidth-90, MAXFLOAT); NSDictionary *dict = @{NSFontAttributeName:ResponseContentFont}; CGSize size4 = [mstr boundingRectWithSize:size3 options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:dict context:nil].size; self.zanFrame=CGRectMake(70,CGRectGetMaxY(self.timeFrame), YBScreenBoundsWidth-90, size4.height); NSArray *listArr=self.shareInfo.replyPage[@"list"]; if (![listArr isKindOfClass:[NSNull class]]) { for (int i=0; i<listArr.count; i++) { if (i==0) { NSDictionary *dic=listArr[i]; NSString* strAfterDecodeByUTF8AndURI = [dic[@"content"] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString *contentstr=[NSString stringWithFormat:@"%@回复:%@",dic[@"replyer"][@"name"], strAfterDecodeByUTF8AndURI]; CGFloat contentRepX=70; CGFloat contentRepY; if (self.shareInfo.zans.allKeys.count==0) { contentRepY=CGRectGetMaxY(self.timeFrame)+10; }else{ contentRepY=CGRectGetMaxY(self.zanFrame)+10; } CGFloat contentRepW=YBScreenBoundsWidth-90; CGSize size3 = CGSizeMake(YBScreenBoundsWidth-90, MAXFLOAT); NSDictionary *dict = @{NSFontAttributeName:ResponseContentFont}; CGSize size4 = [contentstr boundingRectWithSize:size3 options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:dict context:nil].size; CGFloat contentRepH=size4.height; CGRect rect=CGRectMake(contentRepX, contentRepY, contentRepW, contentRepH); NSValue *value = [NSValue valueWithCGRect:rect]; [self.responseViewHeightArr addObject:value]; }else{ NSDictionary *dic=listArr[i]; NSValue *value=[self.responseViewHeightArr objectAtIndex:i-1]; CGRect lastrect=[value CGRectValue]; NSString* strAfterDecodeByUTF8AndURI = [dic[@"content"] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString *contentstr=[NSString stringWithFormat:@"%@回复:%@",dic[@"replyer"][@"name"],strAfterDecodeByUTF8AndURI]; CGFloat contentRepX=70; CGFloat contentRepY=CGRectGetMaxY(lastrect)+10; CGFloat contentRepW=YBScreenBoundsWidth-90; CGSize size3 = CGSizeMake(YBScreenBoundsWidth-90, MAXFLOAT); NSDictionary *dict = @{NSFontAttributeName:ResponseContentFont}; CGSize size4 = [contentstr boundingRectWithSize:size3 options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:dict context:nil].size; CGFloat contentRepH=size4.height; CGRect rect=CGRectMake(contentRepX, contentRepY, contentRepW, contentRepH); NSValue *value2 = [NSValue valueWithCGRect:rect]; [self.responseViewHeightArr addObject:value2]; } } } } if ([self.shareInfo.type isEqualToString:@"LOCATION"]) { self.mapFrame=CGRectMake(70,40, YBScreenBoundsWidth-90, YBScreenBoundsWidth-90); self.timeFrame=CGRectMake(70, CGRectGetMaxY(self.mapFrame)+10, 100,20); self.blogToolBarF=CGRectMake(YBScreenBoundsWidth-20-22, CGRectGetMaxY(self.mapFrame)+10, 22, 13); NSMutableString *mstr=[[NSMutableString alloc]initWithCapacity:0]; for (int i=0; i<self.shareInfo.zans.allValues.count; i++) { if (i==0) { [mstr appendString:[NSString stringWithFormat:@"❤️%@ ",self.shareInfo.zans.allValues[0]]]; }else{ [mstr appendString:[NSString stringWithFormat:@" %@",self.shareInfo.zans.allValues[i]]]; } } CGSize size3 = CGSizeMake(YBScreenBoundsWidth-90, MAXFLOAT); NSDictionary *dict = @{NSFontAttributeName:ResponseContentFont}; CGSize size4 = [mstr boundingRectWithSize:size3 options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:dict context:nil].size; self.zanFrame=CGRectMake(70,CGRectGetMaxY(self.timeFrame), YBScreenBoundsWidth-90, size4.height); NSArray *listArr=self.shareInfo.replyPage[@"list"]; if(![listArr isKindOfClass:[NSNull class]]){ for (int i=0; i<listArr.count; i++) { if (i==0) { NSDictionary *dic=listArr[i]; NSString* strAfterDecodeByUTF8AndURI = [dic[@"content"] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString *contentstr=[NSString stringWithFormat:@"%@回复:%@",dic[@"replyer"][@"name"], strAfterDecodeByUTF8AndURI]; CGFloat contentRepX=70; CGFloat contentRepY; if (self.shareInfo.zans.allKeys.count==0) { contentRepY=CGRectGetMaxY(self.timeFrame)+10; }else{ contentRepY=CGRectGetMaxY(self.zanFrame)+10; } CGFloat contentRepW=YBScreenBoundsWidth-90; CGSize size3 = CGSizeMake(YBScreenBoundsWidth-90, MAXFLOAT); NSDictionary *dict = @{NSFontAttributeName:ResponseContentFont}; CGSize size4 = [contentstr boundingRectWithSize:size3 options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:dict context:nil].size; CGFloat contentRepH=size4.height; CGRect rect=CGRectMake(contentRepX, contentRepY, contentRepW, contentRepH); NSValue *value = [NSValue valueWithCGRect:rect]; [self.responseViewHeightArr addObject:value]; }else{ NSDictionary *dic=listArr[i]; NSValue *value=[self.responseViewHeightArr objectAtIndex:i-1]; CGRect lastrect=[value CGRectValue]; NSString* strAfterDecodeByUTF8AndURI = [dic[@"content"] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString *contentstr=[NSString stringWithFormat:@"%@回复:%@",dic[@"replyer"][@"name"],strAfterDecodeByUTF8AndURI]; CGFloat contentRepX=70; CGFloat contentRepY=CGRectGetMaxY(lastrect)+10; CGFloat contentRepW=YBScreenBoundsWidth-90; CGSize size3 = CGSizeMake(YBScreenBoundsWidth-90, MAXFLOAT); NSDictionary *dict = @{NSFontAttributeName:ResponseContentFont}; CGSize size4 = [contentstr boundingRectWithSize:size3 options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:dict context:nil].size; CGFloat contentRepH=size4.height; CGRect rect=CGRectMake(contentRepX, contentRepY, contentRepW, contentRepH); NSValue *value2 = [NSValue valueWithCGRect:rect]; [self.responseViewHeightArr addObject:value2]; } } } } if ([self.shareInfo.type isEqualToString:@"VIDEO"]) { //视频 CGFloat contentVidX=70; CGFloat contentVidY=40+size2.height+10; CGFloat contentVidW=YBScreenBoundsWidth-90; CGFloat contentVidH=150; self.playviewFrame=CGRectMake(contentVidX, contentVidY, contentVidW, contentVidH); self.timeFrame=CGRectMake(70, CGRectGetMaxY(self.playviewFrame)+10, 100,20); self.blogToolBarF=CGRectMake(YBScreenBoundsWidth-20-22, CGRectGetMaxY(self.playviewFrame)+10, 22, 13); NSMutableString *mstr=[[NSMutableString alloc]initWithCapacity:0]; for (int i=0; i<self.shareInfo.zans.allValues.count; i++) { if (i==0) { [mstr appendString:[NSString stringWithFormat:@"❤️%@ ",self.shareInfo.zans.allValues[0]]]; }else{ [mstr appendString:[NSString stringWithFormat:@" %@",self.shareInfo.zans.allValues[i]]]; } } CGSize size3 = CGSizeMake(YBScreenBoundsWidth-90, MAXFLOAT); NSDictionary *dict = @{NSFontAttributeName:ResponseContentFont}; CGSize size4 = [mstr boundingRectWithSize:size3 options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:dict context:nil].size; self.zanFrame=CGRectMake(70,CGRectGetMaxY(self.timeFrame), YBScreenBoundsWidth-90, size4.height); NSArray *listArr=self.shareInfo.replyPage[@"list"]; if (![listArr isKindOfClass:[NSNull class]]) { for (int i=0; i<listArr.count; i++) { if (i==0) { NSDictionary *dic=listArr[i]; NSString* strAfterDecodeByUTF8AndURI = [dic[@"content"] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString *contentstr=[NSString stringWithFormat:@"%@回复:%@",dic[@"replyer"][@"name"], strAfterDecodeByUTF8AndURI]; CGFloat contentRepX=70; CGFloat contentRepY; if (self.shareInfo.zans.allKeys.count==0) { contentRepY=CGRectGetMaxY(self.timeFrame)+10; }else{ contentRepY=CGRectGetMaxY(self.zanFrame)+10; } CGFloat contentRepW=YBScreenBoundsWidth-90; CGSize size3 = CGSizeMake(YBScreenBoundsWidth-90, MAXFLOAT); NSDictionary *dict = @{NSFontAttributeName:ResponseContentFont}; CGSize size4 = [contentstr boundingRectWithSize:size3 options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:dict context:nil].size; CGFloat contentRepH=size4.height; CGRect rect=CGRectMake(contentRepX, contentRepY, contentRepW, contentRepH); NSValue *value = [NSValue valueWithCGRect:rect]; [self.responseViewHeightArr addObject:value]; }else{ NSDictionary *dic=listArr[i]; NSValue *value=[self.responseViewHeightArr objectAtIndex:i-1]; CGRect lastrect=[value CGRectValue]; NSString* strAfterDecodeByUTF8AndURI = [dic[@"content"] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString *contentstr=[NSString stringWithFormat:@"%@回复:%@",dic[@"replyer"][@"name"],strAfterDecodeByUTF8AndURI]; CGFloat contentRepX=70; CGFloat contentRepY=CGRectGetMaxY(lastrect)+10; CGFloat contentRepW=YBScreenBoundsWidth-90; CGSize size3 = CGSizeMake(YBScreenBoundsWidth-90, MAXFLOAT); NSDictionary *dict = @{NSFontAttributeName:ResponseContentFont}; CGSize size4 = [contentstr boundingRectWithSize:size3 options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:dict context:nil].size; CGFloat contentRepH=size4.height; CGRect rect=CGRectMake(contentRepX, contentRepY, contentRepW, contentRepH); NSValue *value2 = [NSValue valueWithCGRect:rect]; [self.responseViewHeightArr addObject:value2]; } } } } if ([self.shareInfo.type isEqualToString:@"IMAGE"]) { //图片 for (int i=0; i<self.shareInfo.referUris.count; i++) { CGFloat imageW=(YBScreenBoundsWidth-110)/3; CGFloat imageH=imageW; CGFloat imageX=70+(imageW+10)*(i%3); CGFloat imageY=10+CGRectGetMaxY(self.contentFrame)+(imageH+10)*(i/3); CGRect imageRect=CGRectMake(imageX, imageY, imageW, imageH); NSValue *value = [NSValue valueWithCGRect:imageRect]; [self.imageViewFArr addObject:value]; if (i==self.shareInfo.referUris.count-1) { NSArray *listArr=self.shareInfo.replyPage[@"list"]; if (![listArr isKindOfClass:[NSNull class]]) { for (int i=0; i<listArr.count; i++) { if (i==0) { NSDictionary *dic=listArr[i]; NSString* strAfterDecodeByUTF8AndURI = [dic[@"content"] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString *contentstr=[NSString stringWithFormat:@"%@回复:%@",dic[@"replyer"][@"name"],strAfterDecodeByUTF8AndURI]; CGFloat contentRepX=70; CGFloat contentRepY=imageY+imageH+10+40; CGFloat contentRepW=YBScreenBoundsWidth-90; CGSize size3 = CGSizeMake(YBScreenBoundsWidth-90, MAXFLOAT); NSDictionary *dict = @{NSFontAttributeName:ResponseContentFont}; CGSize size4 = [contentstr boundingRectWithSize:size3 options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:dict context:nil].size; CGFloat contentRepH=size4.height; CGRect rect=CGRectMake(contentRepX, contentRepY, contentRepW, contentRepH); NSValue *value = [NSValue valueWithCGRect:rect]; [self.responseViewHeightArr addObject:value]; }else{ NSDictionary *dic=listArr[i]; NSValue *value=[self.responseViewHeightArr objectAtIndex:i-1]; CGRect lastrect=[value CGRectValue]; NSString* strAfterDecodeByUTF8AndURI = [dic[@"content"] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString *contentstr=[NSString stringWithFormat:@"%@回复:%@",dic[@"replyer"][@"name"],strAfterDecodeByUTF8AndURI]; CGFloat contentRepX=70; CGFloat contentRepY=CGRectGetMaxY(lastrect)+10; CGFloat contentRepW=YBScreenBoundsWidth-90; CGSize size3 = CGSizeMake(YBScreenBoundsWidth-90, MAXFLOAT); NSDictionary *dict = @{NSFontAttributeName:ResponseContentFont}; CGSize size4 = [contentstr boundingRectWithSize:size3 options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:dict context:nil].size; CGFloat contentRepH=size4.height; CGRect rect=CGRectMake(contentRepX, contentRepY, contentRepW, contentRepH); NSValue *value2 = [NSValue valueWithCGRect:rect]; [self.responseViewHeightArr addObject:value2]; } } } if (i==self.shareInfo.referUris.count-1) { NSValue *lasevalue=[self.imageViewFArr lastObject]; CGRect rect=[lasevalue CGRectValue]; self.timeFrame=CGRectMake(70, CGRectGetMaxY(rect)+10, 150,20); self.blogToolBarF=CGRectMake(YBScreenBoundsWidth-20-22, CGRectGetMaxY(rect)+6,22, 13); NSMutableString *mstr=[[NSMutableString alloc]initWithCapacity:0]; for (int i=0; i<self.shareInfo.zans.allValues.count; i++) { if (i==0) { [mstr appendString:[NSString stringWithFormat:@"❤️%@",self.shareInfo.zans.allValues[0]]]; }else{ [mstr appendString:self.shareInfo.zans.allValues[i]]; } } CGSize size3 = CGSizeMake(YBScreenBoundsWidth-90, MAXFLOAT); NSDictionary *dict = @{NSFontAttributeName:ResponseContentFont}; CGSize size4 = [mstr boundingRectWithSize:size3 options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:dict context:nil].size; self.zanFrame=CGRectMake(70,CGRectGetMaxY(self.timeFrame), YBScreenBoundsWidth-90, size4.height); } } } } self.delectFrame=CGRectMake(150, self.timeFrame.origin.y-2, 60, 25); if (contentH>90&&![self.shareInfo.content containsString:@"{"]) { self.showAllFrame=CGRectMake(210, self.timeFrame.origin.y-2, 60, 25); } NSArray *listArr=self.shareInfo.replyPage[@"list"]; if (![listArr isKindOfClass:[NSNull class]]) { NSValue *lasevalue=[self.responseViewHeightArr lastObject]; CGRect rect=[lasevalue CGRectValue]; self.cellHeight=CGRectGetMaxY(rect)+20; }else{ if (self.shareInfo.zans.allKeys.count==0) { self.cellHeight=CGRectGetMaxY(self.timeFrame)+20; }else{ self.cellHeight=CGRectGetMaxY(self.zanFrame)+20; } } if (listArr.count==0) { if (self.shareInfo.zans.allKeys.count==0) { self.cellHeight=CGRectGetMaxY(self.timeFrame)+20; }else{ self.cellHeight=CGRectGetMaxY(self.zanFrame)+20; } } } @end
3.cell对应的UI搭建
-(void)setShareF:(ShareInfoFrame *)shareF{ _shareF=shareF; UIImageView *iconimage=[[UIImageView alloc]initWithFrame:shareF.iconImageFrame]; NSString *iconUrlStr = [NSString stringWithFormat:@"%@/msp/user/getHeadIcon?uid=%@",ZJURL,shareF.shareInfo.user.idNum]; iconimage.layer.cornerRadius=20; iconimage.layer.masksToBounds=YES; if ([shareF.shareInfo.content containsString:@"{"]) { [iconimage setImage:[UIImage imageNamed:@"FCircle_gonggao"]]; }else{ [iconimage sd_setImageWithURL:iconUrlStr.mj_url placeholderImage:[UIImage imageNamed:@""]]; } [self addSubview:iconimage]; UITapGestureRecognizer *imagetap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(iconTapDown)]; iconimage.userInteractionEnabled=YES; [iconimage addGestureRecognizer:imagetap]; UILabel *nameLab=[[UILabel alloc]initWithFrame:shareF.nameFrame]; nameLab.numberOfLines=0; nameLab.text=shareF.shareInfo.user.name; [self addSubview:nameLab]; UILabel *contentLab=[[UILabel alloc]initWithFrame:shareF.contentFrame]; [contentLab setFont:ContentFont]; contentLab.numberOfLines=0; if ([shareF.shareInfo.content containsString:@"{"]) { NSDictionary *dic=[self parseJSONStringToNSDictionary:shareF.shareInfo.content]; contentLab.text=[NSString stringWithFormat:@"%@%@",dic[@"user"][@"name"],dic[@"message"]]; }else{ contentLab.text=shareF.shareInfo.content; } [self addSubview:contentLab]; UIButton *showAllbtn=[[UIButton alloc]initWithFrame:shareF.showAllFrame]; [showAllbtn setTitleColor:[UIColor colorWithHexString:@"556b95"] forState:UIControlStateNormal]; showAllbtn.font=TimeFont; if (!shareF.shareInfo.hasShowAll) { [showAllbtn setTitle:@"全文" forState:UIControlStateNormal]; }else{ [showAllbtn setTitle:@"收起" forState:UIControlStateNormal]; } [showAllbtn addTarget:self action:@selector(showAllBtnDown:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:showAllbtn]; if ([shareF.shareInfo.type isEqualToString:@"SOUND"]) { UIButton *playSoundBtn=[[UIButton alloc]initWithFrame:shareF.playSoundFrame]; UIImage *image = [UIImage imageNamed:@"FCircle_yuyinplay"]; //顶端盖的高度 CGFloat top = 0; CGFloat bottom = 0;//低端盖的高度 CGFloat left = 23;//左端盖的高度 CGFloat right =3;//右端盖的高度 UIEdgeInsets insets = UIEdgeInsetsMake(top, left, bottom, right); //指定为拉伸模式,伸缩后重新赋值 [playSoundBtn setBackgroundImage: [image resizableImageWithCapInsets:insets resizingMode:UIImageResizingModeStretch] forState:UIControlStateNormal]; [playSoundBtn addTarget:self action:@selector(playSound) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:playSoundBtn]; UILabel *druLab=[[UILabel alloc]initWithFrame:CGRectMake(CGRectGetMaxX(shareF.playSoundFrame), shareF.playSoundFrame.origin.y, 50, 25)]; druLab.text=[NSString stringWithFormat:@"%@s",shareF.shareInfo.duration]; druLab.font=TimeFont; [self addSubview:druLab]; } if ([shareF.shareInfo.type isEqualToString:@"VIDEO"]) { self.moviePlayer = [[MPMoviePlayerController alloc] init]; self.moviePlayer.controlStyle = MPMovieControlStyleNone; self.moviePlayer.shouldAutoplay = NO; self.moviePlayer.view.frame = shareF.playviewFrame; UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc]initWithTarget:self.moviePlayer.view action:@selector(movieTapDown)]; [self.moviePlayer.view addGestureRecognizer:tap]; NSString *url= [NSString stringWithFormat:@"%@/msp%@",ZJURL,shareF.shareInfo.referUris[0]];// moviePlayer.movieSourceType = MPMovieSourceTypeStreaming; self.moviePlayer.contentURL=[NSURL URLWithString: url]; [self addSubview:self.moviePlayer.view]; [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(movieFinish) name:MPMoviePlayerPlaybackDidFinishNotification object:self.moviePlayer]; [self.moviePlayer pause]; self.bgview=[[UIImageView alloc]initWithFrame:shareF.playviewFrame]; [self.bgview sd_setImageWithURL:[NSString stringWithFormat:@"%@/msp%@",ZJURL,shareF.shareInfo.referUris[1]].url]; [self addSubview:self.bgview]; self.playBtn=[[UIButton alloc]initWithFrame:shareF.playviewFrame]; [self.playBtn setImage:[UIImage imageNamed:@"FCircle_play"] forState:UIControlStateNormal]; [self.playBtn addTarget:self action:@selector(playBtnDown) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:self.playBtn];// [self.moviePlayer play]; } if ([shareF.shareInfo.type isEqualToString:@"LOCATION"]) { NSArray *arr=[shareF.shareInfo.location componentsSeparatedByString:@","];// self.mapView=[[MAMapView alloc]init];// // CLLocationDegrees lat=[arr[0] doubleValue];// CLLocationDegrees longi=[arr[1] doubleValue];// CLLocationCoordinate2D cllocation=CLLocationCoordinate2DMake(lat, longi);// self.mapView.centerCoordinate=cllocation;// self.mapView.zoomLevel=13;// // // self.mapView.showsUserLocation=YES;//// // ///把地图添加至view// [self addSubview:self.mapView]; NSURL *url= [NSURL URLWithString: [NSString stringWithFormat:@"%@/msp%@",ZJURL,shareF.shareInfo.referUris[0]]]; UIImageView *imageview=[[UIImageView alloc]initWithFrame:shareF.mapFrame]; [imageview sd_setImageWithURL:url placeholderImage:nil]; imageview.contentMode=UIViewContentModeScaleToFill; [self addSubview:imageview]; imageview.userInteractionEnabled=YES; UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(maptapDown)]; [imageview addGestureRecognizer:tap]; } if ([shareF.shareInfo.type isEqualToString:@"IMAGE"]) { for (int i=0; i<shareF.imageViewFArr.count; i++) { NSURL *url= [NSURL URLWithString: [NSString stringWithFormat:@"%@/msp%@",ZJURL,shareF.shareInfo.referUris[i]]]; UIImage * img = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];// UIImageView *imageview=[[UIImageView alloc]initWithFrame:[shareF.imageViewFArr[i] CGRectValue]];// [imageview sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@""]];// [self addSubview:imageview]; UIButton *btn=[[UIButton alloc]initWithFrame:[shareF.imageViewFArr[i] CGRectValue]]; [btn setImage:img forState:UIControlStateNormal]; btn.tag=i; [btn addTarget:self action:@selector(showImageBtn:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:btn]; } } self.timeLab=[[UILabel alloc]initWithFrame:shareF.timeFrame];// timeLab.text=[self changeTime:shareF.shareInfo.sendTime]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate *date = [dateFormatter dateFromString:shareF.shareInfo.sendTime]; self.timeLab.text=[self timeSinceDateNewRole:date]; self.timeLab.font=TimeFont; self.timeLab.hidden=NO; [self addSubview:self.timeLab]; if ([shareF.shareInfo.user.idNum isEqualToString:[SelfDataModel returnModelBySelectFMDB].idNum]) { UIButton *delectBtn=[[UIButton alloc]initWithFrame:shareF.delectFrame]; [delectBtn setFont:TimeFont]; [delectBtn setTitle:@"删除" forState:UIControlStateNormal]; [delectBtn addTarget:self action:@selector(delectBtn) forControlEvents:UIControlEventTouchUpInside]; [delectBtn setTitleColor:[UIColor colorWithHexString:@"556b95"] forState:UIControlStateNormal]; [self addSubview:delectBtn]; } UILabel *zanLab=[[UILabel alloc]initWithFrame:shareF.zanFrame]; NSMutableString *mzanstr=[[NSMutableString alloc]initWithCapacity:0]; for (int i=0; i<self.shareF.shareInfo.zans.allValues.count; i++) { if (i==0) { [mzanstr appendString:[NSString stringWithFormat:@"❤️%@ ",self.shareF.shareInfo.zans.allValues[0]]]; }else{ [mzanstr appendString:[NSString stringWithFormat:@" %@",self.shareF.shareInfo.zans.allValues[i]]]; } } zanLab.text=mzanstr; zanLab.numberOfLines=0; zanLab.font=ResponseContentFont; [self addSubview:zanLab]; UIButton *commentBtn=[[UIButton alloc]initWithFrame:shareF.blogToolBarF]; // [commentBtn addTarget:self action:@selector(commentBtnDown) forControlEvents:UIControlEventTouchUpInside];// [commentBtn setImage:[UIImage imageNamed:@"FCircle_pinglun"] forState:UIControlStateNormal]; [commentBtn setBackgroundImage:[UIImage imageNamed:@"FCircle_pinglun"] forState:UIControlStateNormal]; [self addSubview:commentBtn]; UIButton *bigCommentBtn=[[UIButton alloc]initWithFrame:CGRectMake(shareF.blogToolBarF.origin.x-10, shareF.blogToolBarF.origin.y-3,33, 18)]; [bigCommentBtn addTarget:self action:@selector(commentBtnDown) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:bigCommentBtn]; NSArray *listArr=shareF.shareInfo.replyPage[@"list"]; for (int i=0; i<shareF.responseViewHeightArr.count; i++) { NSDictionary *dic=listArr[i];// NSString *unicodeStr = [NSString stringWithCString:[dic[@"content"] UTF8String] encoding:NSUnicodeStringEncoding]; NSString* strAfterDecodeByUTF8AndURI = [dic[@"content"] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString *contentstr=[NSString stringWithFormat:@"%@回复:%@",dic[@"replyer"][@"name"],strAfterDecodeByUTF8AndURI]; UILabel *repLab=[[UILabel alloc]initWithFrame:[[shareF.responseViewHeightArr objectAtIndex:i] CGRectValue]]; repLab.numberOfLines=0; repLab.font=ResponseContentFont; repLab.text=contentstr; repLab.tag=100+i; [self addSubview:repLab]; repLab.userInteractionEnabled=YES; UILongPressGestureRecognizer *longPress=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPressDown:)]; [repLab addGestureRecognizer:longPress]; } self.commentview=[[[NSBundle mainBundle]loadNibNamed:@"CommentView" owner:nil options:nil]firstObject]; self.commentview.frame=CGRectMake(YBScreenBoundsWidth-62-100, shareF.blogToolBarF.origin.y-10,0 ,30); self.commentview.layer.masksToBounds=YES; self.commentview.hidden=YES; self.commentview.layer.cornerRadius=3; self.commentview.delegate=self; NSString *idnum=[SelfDataModel returnModelBySelectFMDB].idNum; if([self.shareF.shareInfo.zans.allKeys containsObject:idnum]) { self.commentview.haszanLab.text=@"取消"; }else{ self.commentview.haszanLab.text=@"赞"; } [self addSubview:self.commentview]; UIView *lineview=[[UIView alloc]initWithFrame:CGRectMake(0, shareF.cellHeight-1, YBScreenBoundsWidth, 1)]; lineview.backgroundColor=RGB(180, 180, 180, 1); [self.contentView addSubview:lineview];}-(void)longPressDown:(UILongPressGestureRecognizer *)longPress{ UILabel *lab=(UILabel *)longPress.view; int index=lab.tag-100; NSArray *listArr=self.shareF.shareInfo.replyPage[@"list"]; NSDictionary *dic=listArr[index]; NSString *selectId=dic[@"replyer"][@"id"]; NSString* strAfterDecodeByUTF8AndURI = [dic[@"content"] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString *replyId=dic[@"id"]; if ([selectId isEqualToString:[SelfDataModel returnModelBySelectFMDB].idNum]) { [self.delegate delectInfowithId:selectId andcontent:strAfterDecodeByUTF8AndURI andReplyid:replyId andShareF:self.shareF andrepIndex:index]; }}
总结:看起来难的东西,只要思路对了就好了
- 仿微信朋友圈以及新浪微博
- 朋友圈&新浪微博技术方案.md
- 新浪微博、微信朋友圈、qq空间分享---微信朋友圈
- 新浪微博、微信朋友圈、qq空间分享---新浪微博
- QQ、QQ空间、微信好友、微信朋友圈、新浪微博的分享。
- iOS新浪微博 微信好友、微信朋友圈、QQ自身sdk分享方法
- 用友盟的组件实现分享内容到新浪微博,微信,朋友圈
- 新浪微博、微信朋友圈、qq空间分享---qq空间分享
- 友盟分享到朋友圈,QQ,新浪微博的注意事项
- 安卓分享到QQ好友 QQ空间 微信好友 微信朋友圈 新浪微博分享
- work_weipa_使用shareSDK实现一键分享(QQ好友和空间、微信好友和朋友圈、新浪微博)
- 基于Qt下移动平台第三方接入-ShareSDK(新浪微博,微信朋友圈等分享登录)
- 利用ASIHTTPRequest 发送数据到(新浪微博)以及新浪API Oauth认证
- 利用ASIHTTPRequest 发送数据到(新浪微博)以及新浪API Oauth认证
- android新浪微博Oauth2.0认证以及登录
- android新浪微博Oauth2.0认证以及登录
- android客户端接入新浪、腾讯微博以及人人网
- android客户端接入新浪、腾讯微博以及人人网
- oracle 表空间不够了
- spring boot 开发环境搭建,基于spring boot 1.4.2
- 【JAVA 课后习题 12.5】+ 自定义异常类
- CDH5.8 安装记录
- C语言OJ项目参考(1045)插入有序数组中
- 仿微信朋友圈以及新浪微博
- 第14周 项目1 - (1)验证折半查找算法
- opencv3.1自带demo的介绍和运行操作。
- 作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh
- Java-矩阵运算
- 纪念SlingShot 矩阵快速幂 构造矩阵
- Great minds have purpose, others have wishes.[16.11英语总结]
- 进程间通信的方式
- NNU_20161027_4PAT1027. 打印沙漏