仿微信朋友圈 仿微信朋友圈时间轴 支持发送图文 短视频 赞 评论 图片大图浏览 视频预览
https://github.com/anyunzhong/AndroidTimelineView
pod'DFTimelineView'#import"DFTimelineView.h" DFTextImageLineItem *textImageItem = [[DFTextImageLineItem alloc] init]; textImageItem.itemId = 10000000; //随便设置一个 待服务器生成 textImageItem.userId = 10018; textImageItem.userAvatar = @"http://file-cdn.datafans.net/avatar/1.jpeg"; textImageItem.userNick = @"富二代"; textImageItem.title = @"发表了"; textImageItem.text = text; NSMutableArray *srcImages = [NSMutableArrayarray]; textImageItem.srcImages = srcImages; //大图 可以是本地路径 也可以是网络地址 会自动判断NSMutableArray *thumbImages = [NSMutableArrayarray]; textImageItem.thumbImages = thumbImages; //小图 可以是本地路径 也可以是网络地址 会自动判断for (id img in images){[srcImages addObject:img]; [thumbImages addObject:img]} textImageItem.location = @"广州信息港"; [selfaddItemTop:textImageItem]; DFVideoLineItem *videoItem = [[DFVideoLineItem alloc] init]; videoItem.itemId = 10000000; //随便设置一个 待服务器生成 videoItem.userId = 10018; videoItem.userAvatar = @"http://file-cdn.datafans.net/avatar/1.jpeg"; videoItem.userNick = @"富二代"; videoItem.title = @"发表了"; videoItem.text = @"新年过节 哈哈"; //这里需要present一个界面 用户填入文字后再发送 场景和发图片一样 videoItem.location = @"广州"; videoItem.localVideoPath = videoPath; videoItem.videoUrl = @""; //网络路径 videoItem.thumbUrl = @""; videoItem.thumbImage = screenShot; //如果thumbImage存在 优先使用thumbImage [selfaddItemTop:videoItem]; -(void)onSendTextImage:(NSString *)text images:(NSArray *)images;-(void)onSendTextImage:(NSString *)text images:(NSArray *)images;//添加到末尾 -(void) addItem:(DFBaseLineItem *) item; //添加到头部 -(void) addItemTop:(DFBaseLineItem *) item; DFLineLikeItem *likeItem1_1 = [[DFLineLikeItem alloc] init]; likeItem1_1.userId = 10086; likeItem1_1.userNick = @"Allen"; [textImageItem.likes addObject:likeItem1_1]; DFLineLikeItem *likeItem1_2 = [[DFLineLikeItem alloc] init]; likeItem1_2.userId = 10088; likeItem1_2.userNick = @"奥巴马"; [textImageItem.likes addObject:likeItem1_2]; DFLineCommentItem *commentItem1_1 = [[DFLineCommentItem alloc] init]; commentItem1_1.commentId = 10001; commentItem1_1.userId = 10086; commentItem1_1.userNick = @"习大大"; commentItem1_1.text = @"精彩 大家鼓掌"; [textImageItem.comments addObject:commentItem1_1]; DFLineCommentItem *commentItem1_2 = [[DFLineCommentItem alloc] init]; commentItem1_2.commentId = 10002; commentItem1_2.userId = 10088; commentItem1_2.userNick = @"奥巴马"; commentItem1_2.text = @"欢迎来到美利坚"; commentItem1_2.replyUserId = 10086; commentItem1_2.replyUserNick = @"习大大"; [textImageItem.comments addObject:commentItem1_2]; DFLineCommentItem *commentItem1_3 = [[DFLineCommentItem alloc] init]; commentItem1_3.commentId = 10003; commentItem1_3.userId = 10010; commentItem1_3.userNick = @"神雕侠侣"; commentItem1_3.text = @"呵呵"; [textImageItem.comments addObject:commentItem1_3]; -(void) refresh{//下来刷新 从服务器请求最新数据//请求完成后结束刷新 [selfendRefresh]} -(void) loadMore{//加载更多 从服务器请求数据//请求完成后结束上拉更多 [selfendLoadMore]} NSString *coverUrl = [NSStringstringWithFormat:@"http://file-cdn.datafans.net/temp/12.jpg_%dx%d.jpeg", (int)self.coverWidth, (int)self.coverHeight]; [selfsetCover:coverUrl]; NSString *avatarUrl = [NSStringstringWithFormat:@"http://file-cdn.datafans.net/avatar/1.jpeg_%dx%d.jpeg", (int)self.userAvatarSize, (int)self.userAvatarSize]; [selfsetUserAvatar:avatarUrl]; [selfsetUserNick:@"Allen"]; [selfsetUserSign:@"梦想还是要有的 万一实现了呢"];-(void)onCommentCreate:(longlong)commentId text:(NSString *)text itemId:(longlong) itemId{DFLineCommentItem *commentItem = [[DFLineCommentItem alloc] init]; commentItem.commentId = [[NSDatedate] timeIntervalSince1970]; commentItem.userId = 10098; commentItem.userNick = @"金三胖"; commentItem.text = text; [selfaddCommentItem:commentItem itemId:itemId replyCommentId:commentId]; //接下来可以请求服务器操作数据 也可以先请求服务器后再刷新界面 } -(void)onLike:(longlong)itemId{//点赞 DFLineLikeItem *likeItem = [[DFLineLikeItem alloc] init]; likeItem.userId = 10092; likeItem.userNick = @"琅琊榜"; [selfaddLikeItem:likeItem itemId:itemId]; //接下来可以请求服务器操作数据 也可以先请求服务器后再刷新界面 } -(void)onClickUser:(NSUInteger)userId{//点击左边头像 或者 点击评论和赞的用户昵称//例如去到用户单独的时间轴 也可以自定义到其它地方 UserViewController *controller = [[UserViewController alloc] init]; [self.navigationController pushViewController:controller animated:YES]} -(void)onClickHeaderUserAvatar{[selfonClickUser:[当前用户ID]]} @interfaceDFShareLineItem : DFBaseLineItem@property (nonatomic, strong) NSString *title; @property (nonatomic, strong) UIImage *digest; ................... @end@implementationDFShareLineCell - (instancetype)initWithStyle:(UITableViewCellStyle)stylereuseIdentifier:(NSString *)reuseIdentifier{self = [superinitWithStyle:style reuseIdentifier:reuseIdentifier]; if (self){//初始化相关View UILabel *label = ...... [self.bodyView addSubview:label]; //bodyView只中间部分的容器 比如图文就是文字+九宫格图片部分 视频就是文字+视频区域//注意:不能把view直接加到cell的contentView上面 } return self} //更新数据 必需实现 -(void)updateWithItem:(DFShareLineItem *)item{[superupdateWithItem:item]; //将数据更新到相关view上 同时计算出总的高度//最后更新父容器的高度 [selfupdateBodyView:(计算出的高度)]} //通过数据计算出cell的高度 -(CGFloat)getCellHeight:(DFShareLineItem *)item{CGFloat height = [supergetCellHeight:item]; //父容器公共部分需要的高度return height + body部分的高度} 注意: 需要在数据加载之前就注册好
DFLineCellManager *manager = [DFLineCellManager sharedInstance]; [manager registerCell:[DFShareLineItem class] cellClass:[DFShareLineCell class]]; - 性能优化
- 用户时间轴完善
- 增加其它新的类型
v1.3.0 重构cell管理模式 点击视频全屏播放
v1.2.9 增加发送图片 发送短视频
v1.2.8 加入pod








