一、总体思路:
在控制器中,每次拿到数据模型(请求了数据、加载新微博)的时候,就调用 - (NSArray *)stausFramesWithStatuses:(NSArray *)statuses, 将HWStatus模型转为HWStatusFrame模型,这个时候就完成了每一条微博(每一个cell )里面各个子控件以后要用到的 Frame 进行了计算,但是还没有将相应的 frame 赋值给相应的子控件的frame (那种赋值操作是在 UITableView代理 里面进行的: cell.statusFrame = self.statusFrames[indexPath.row]; ) 。代码如下:
/**
* 将HWStatus模型转为HWStatusFrame模型
*/
- (NSArray *)stausFramesWithStatuses:(NSArray *)statuses
{
NSMutableArray *frames = [NSMutableArray array];
for (HWStatus *status in statuses) {
HWStatusFrame *f = [[HWStatusFrame alloc] init];
f.status = status; // 在 - (void)setStatus:(HWStatus *)status 完成了每一条微博(每一个cell )里面各个子控件的 Frame 的计算
[frames addObject:f];
}
return frames;
}
二、完整代码:
---------------------------HWHomeViewController.m---------------------------------------------
/**
* 微博数组(里面放的都是HWStatusFrame模型,一个HWStatusFrame对象就代表一条微博)
*/
@property (nonatomic, strong) NSMutableArray *statusFrames;
@end
@implementation HWHomeViewController
- (NSMutableArray *)statusFrames
{
if (!_statusFrames) {
self.statusFrames = [NSMutableArray array];
}
return _statusFrames;
}
/**
* UIRefreshControl进入刷新状态:加载最新的数据
*/
- (void)loadNewStatus:(UIRefreshControl *)control
{
// 1.请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
// 2.拼接请求参数
HWAccount *account = [HWAccountTool account];
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"access_token"] = account.access_token;
// 取出最前面的微博(最新的微博,ID最大的微博)
HWStatusFrame *firstStatusF = [self.statusFrames firstObject];
if (firstStatusF) {
// 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0
params[@"since_id"] = firstStatusF.status.idstr;
}
// 3.发送请求
[mgr GET:@"https://api.weibo.com/2/statuses/friends_timeline.json" parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary *responseObject) {
HWLog(@"%@", responseObject);
// 将 "微博字典"数组 转为 "微博模型"数组
NSArray *newStatuses = [HWStatus objectArrayWithKeyValuesArray:responseObject[@"statuses"]];
// 将 HWStatus数组 转为 HWStatusFrame数组
NSArray *newFrames = [self