Skip to content

仿微信朋友圈时间轴 支持发送图文 短视频 赞 评论 图片大图浏览 视频预览

License

Notifications You must be signed in to change notification settings

walker113/DFTimelineView

Repository files navigation

DFTimelineView

VersionLicensePlatform

仿微信朋友圈 仿微信朋友圈时间轴 支持发送图文 短视频 赞 评论 图片大图浏览 视频预览

AltAltAltAltAltAltAltAltAlt

Android版

https://github.com/anyunzhong/AndroidTimelineView

Installation

pod'DFTimelineView'

Usage

#import"DFTimelineView.h"

主时间轴 直接继承 DFTimeLineViewController

添加图文
 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]]} 

Extend

STEP1: 扩展新类型 继承 DFBaseLineItem 例如扩展一个分享文章的类型
@interfaceDFShareLineItem : DFBaseLineItem@property (nonatomic, strong) NSString *title; @property (nonatomic, strong) UIImage *digest; ................... @end
STEP2: 扩展CELL 继承 DFBaseLineCell 例如扩展一个分享文章的CELL为例
@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部分的高度} 
STEP3: 将实体和cell关联起来 加载数据的时候 通过实体去找对应的cell

注意: 需要在数据加载之前就注册好

 DFLineCellManager *manager = [DFLineCellManager sharedInstance]; [manager registerCell:[DFShareLineItem class] cellClass:[DFShareLineCell class]]; 

TODO

  • 性能优化
  • 用户时间轴完善
  • 增加其它新的类型

ChangeLog

v1.3.0 重构cell管理模式 点击视频全屏播放

v1.2.9 增加发送图片 发送短视频

v1.2.8 加入pod

About

仿微信朋友圈时间轴 支持发送图文 短视频 赞 评论 图片大图浏览 视频预览

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Objective-C99.2%
  • Ruby0.8%