采用了MVVM + RAC的方式,对微头条界面 使用YYCache 进行了本地缓存
效果跟目前最新的今日头条有些地方不一样,因为今日头条最近更新了新版本
下面对项目中的一些效果和实现思路做下介绍
如果您有什么问题或者建议,欢迎在简书下面留言或者在github上issue me
网络请求
以首页的顶部的菜单栏为例
WX20180123.png
开始网络请求
- (void)viewDidLoad {
[super viewDidLoad];
HNNavigationBar *bar = [self showCustomNavBar];
[bar.searchSubjuct subscribeNext:^(id _Nullable x) {
NSLog(@"%@",x);
}];
[self configUI];
@weakify(self)
[[self.titleViewModel.titlesCommand execute:@13] subscribeNext:^(id _Nullable x) {
@strongify(self);
self.models = x;
[self reloadData];
[self configPageVC];
}];
}
HNHomeTitleViewModel 中网络请求的处理
这里对网络请求的处理,相对于正常对AFNetWorking的封装,又进行了进一步的封装.
可以参考链接 https://www.jianshu.com/p/1f5cd52981a1
_titlesCommand = [[RACCommand alloc]initWithSignalBlock:^RACSignal * _Nonnull(id _Nullable input) {
return [RACSignal createSignal:^RACDisposable * _Nullable(id _Nonnull subscriber) {
HNHomeTitleRequest *request = [HNHomeTitleRequest netWorkModelWithURLString:HNURLManager.homeTitleURLString isPost:NO];
request.iid = HN_IID;
request.device_id = HN_DEVICE_ID;
request.aid = [input intValue];
[request sendRequestWithSuccess:^(id response) {
NSDictionary *responseDic = (NSDictionary *)response;
responseDic = responseDic[@"data"];
NSMutableArray *models = [NSMutableArray array];
if (responseDic.count > 0) {
NSArray *dicArr = responseDic[@"data"];
for (int i = 0; i < [dicArr count]; i++) {
HNHomeTitleModel *model = [[HNHomeTitleModel new] mj_setKeyValues:dicArr[i]];
[models addObject:model];
}
[subscriber sendNext:models];
[subscriber sendCompleted];
}else {
[MBProgressHUD showError: HN_ERROR_SERVER toView:nil];
}
} failure:^(NSError *error) {
// do something
}];
return nil;
}];
}];
首页图片的展示
WX20180123.png
这个界面上展示的图片都是webp格式的. SDWebImage需要下载一个依赖库才能支持
SDWebImage 文档上关于如何加载webp格式图片的介绍很简单 :
pod 'SDWebImage/WebP'
但是当你实际操作起来,这个东西是一直下载不下来的,即使你开了vpn
你可以看下这个连接的内容: https://www.jianshu.com/p/4468f03cf606
如果还是下载不下来,就还需要调整一些东西,可以在简书下面给我留言.
编辑频道界面