首页 > 代码库 > iOS开发项目篇—31提示最新微博数
iOS开发项目篇—31提示最新微博数
iOS开发项目篇—31提示最新微博数
一、简单说明
1.导入图片素材
2.关于提示条的位置分析
原本的显示情况:
说明:滚动tableView对它没有任何的影响,可以知道提示条的父控件不应该是tableView
加入提示条之后的情况:
解决方案:
说明:
(1)导航条是导航控制器的view子控件,可以把提示条添加到导航控制器的view上,当刷新的时候,有view调整提示条的位置。
(2)关于改变y的值以及transform的选择,如果是动画执行完成之后需要回复到以前的位置,那么建议使用transform
(3)让刷新控件自动进入到刷新状态,注意:通过代码并不会触发代理代理监听方法,只有手动拖动才会触发。
二、代码实现
YYHomeTableViewController.m文件
1 // 2 // YYHomeTableViewController.m 3 // 4 5 #import "YYHomeTableViewController.h" 6 #import "YYOneViewController.h" 7 #import "YYTitleButton.h" 8 #import "YYPopMenu.h" 9 #import "YYAccountModel.h" 10 #import "YYAccountTool.h" 11 #import "AFNetworking.h" 12 #import "UIImageView+WebCache.h" 13 #import "YYUserModel.h" 14 #import "YYStatusModel.h" 15 #import "MJExtension.h" 16 17 @interface YYHomeTableViewController ()<YYPopMenuDelegate> 18 @property(nonatomic,assign)BOOL down; 19 @property(nonatomic,strong)NSMutableArray *statuses; 20 @end 21 22 @implementation YYHomeTableViewController 23 24 #pragma mark- 懒加载 25 -(NSMutableArray *)statuses 26 { 27 if (_statuses==nil) { 28 _statuses=[NSMutableArray array]; 29 } 30 return _statuses; 31 } 32 - (void)viewDidLoad 33 { 34 [super viewDidLoad]; 35 36 //设置导航栏内容 37 [self setupNavBar]; 38 39 //集成刷新控件 40 [self setupRefresh]; 41 } 42 43 //集成刷新控件 44 -(void)setupRefresh 45 { 46 // 1.添加下拉刷新控件 47 UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; 48 [self.tableView addSubview:refreshControl]; 49 50 //2.监听状态 51 [refreshControl addTarget:self action:(@selector(refreshControlStateChange:)) forControlEvents:UIControlEventValueChanged]; 52 53 //3.让刷新控件自动进入到刷新状态 54 [refreshControl beginRefreshing]; 55 56 //4.手动调用方法,加载数据 57 //模拟网络延迟,延迟2.0秒 58 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 59 [self refreshControlStateChange:refreshControl]; 60 }); 61 } 62 63 /** 64 * 当下拉刷新控件进入刷新状态(转圈圈)的时候会自动调用 65 */ 66 -(void)refreshControlStateChange:(UIRefreshControl *)refreshControl 67 { 68 //1.获得请求管理者 69 AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; 70 71 //2.封装请求参数 72 NSMutableDictionary *params=[NSMutableDictionary dictionary]; 73 params[@"access_token"] =[YYAccountTool accountModel].access_token; 74 //取出当前微博模型中的第一条数据,获取第一条数据的id 75 YYStatusModel *firstStatus=[self.statuses firstObject]; 76 if (firstStatus) { 77 params[@"since_id"]=firstStatus.idstr; 78 } 79 80 //3.发送Get请求 81 [mgr GET:@"https://api.weibo.com/2/statuses/home_timeline.json" parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary*accountDict) { 82 // 微博字典 -- 数组 83 NSArray *statusDictArray = accountDict[@"statuses"]; 84 //微博字典数组---》微博模型数组 85 NSArray *newStatuses =[YYStatusModel objectArrayWithKeyValuesArray:statusDictArray]; 86 87 //把新数据添加到旧数据的前面 88 NSRange range=NSMakeRange(0, newStatuses.count); 89 NSIndexSet *indexSet=[NSIndexSet indexSetWithIndexesInRange:range]; 90 [self.statuses insertObjects:newStatuses atIndexes:indexSet]; 91 YYLog(@"刷新了--%d条新数据",newStatuses.count); 92 93 //重新刷新表格 94 [self.tableView reloadData]; 95 //让刷新控件停止刷新(回复默认的状态) 96 [refreshControl endRefreshing]; 97 98 [self showNewStatusesCount:newStatuses.count]; 99 100 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {101 YYLog(@"请求失败");102 //让刷新控件停止刷新(回复默认的状态)103 [refreshControl endRefreshing];104 }];105 106 }107 108 /**109 * 提示用户最新的微博数量110 *111 * @param count 最新的微博数量112 */113 -(void)showNewStatusesCount:(int)count114 {115 //1.创建一个label116 UILabel *label=[[UILabel alloc]init];117 118 //2.设置label的文字119 if (count) {120 label.text=[NSString stringWithFormat:@"共有%d条新的微博数据",count];121 }else122 {123 label.text=@"没有最新的微博数据";124 }125 126 //3.设置label的背景和对其等属性127 label.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageWithName:@"timeline_new_status_background"]];128 label.textAlignment=UITextAlignmentCenter;129 label.textColor=[UIColor whiteColor];130 131 //4.设置label的frame132 label.x=0;133 label.width=self.view.width;134 label.height=35;135 // label.y=64-label.height;136 label.y=self.navigationController.navigationBar.height+20-label.height;137 138 //5.把lable添加到导航控制器的View上139 // [self.navigationController.view addSubview:label];140 //把label添加到导航控制器上,显示在导航栏的下面141 [self.navigationController.view insertSubview:label belowSubview:self.navigationController.navigationBar];142 143 //6.设置动画效果144 CGFloat duration=0.75;145 //设置提示条的透明度146 label.alpha=0.0;147 [UIView animateWithDuration:duration animations:^{148 //往下移动一个label的高度149 label.transform=CGAffineTransformMakeTranslation(0, label.height);150 label.alpha=1.0;151 } completion:^(BOOL finished) {//向下移动完毕152 153 //延迟delay秒的时间后,在执行动画154 CGFloat delay=0.5;155 156 [UIView animateKeyframesWithDuration:duration delay:delay options:UIViewAnimationOptionCurveEaseOut animations:^{157 158 //恢复到原来的位置159 label.transform=CGAffineTransformIdentity;160 label.alpha=0.0;161 162 } completion:^(BOOL finished) {163 164 //删除控件165 [label removeFromSuperview];166 }];167 }];168 }169 170 /**171 UIViewAnimationOptionCurveEaseInOut = 0 << 16, // 开始:由慢到快,结束:由快到慢172 UIViewAnimationOptionCurveEaseIn = 1 << 16, // 由慢到块173 UIViewAnimationOptionCurveEaseOut = 2 << 16, // 由快到慢174 UIViewAnimationOptionCurveLinear = 3 << 16, // 线性,匀速175 */176 177 /**设置导航栏内容*/178 -(void)setupNavBar179 {180 self.navigationItem.leftBarButtonItem=[UIBarButtonItem itemWithImageName:@"navigationbar_friendsearch" highImageName:@"navigationbar_friendsearch_highlighted" target:self action:@selector(friendsearch)];181 self.navigationItem.rightBarButtonItem=[UIBarButtonItem itemWithImageName:@"navigationbar_pop" highImageName:@"navigationbar_pop_highlighted" target:self action:@selector(pop)];182 183 //设置导航栏按钮184 YYTitleButton *titleButton=[[YYTitleButton alloc]init];185 //设置文字186 [titleButton setTitle:@"首页" forState:UIControlStateNormal];187 //设置图标188 [titleButton setImage:[UIImage imageWithName:@"navigationbar_arrow_down"] forState:UIControlStateNormal];189 //设置背景190 [titleButton setBackgroundImage:[UIImage resizedImage:@"navigationbar_filter_background_highlighted"] forState:UIControlStateHighlighted];191 192 //设置尺寸193 titleButton.width=100;194 titleButton.height=35;195 //监听按钮的点击事件196 [titleButton addTarget:self action:@selector(titleButtonClick:) forControlEvents:UIControlEventTouchUpInside];197 self.navigationItem.titleView=titleButton;198 }199 -(void)titleButtonClick:(UIButton *)titleButton200 {201 202 [titleButton setImage:[UIImage imageWithName:@"navigationbar_arrow_up"] forState:UIControlStateNormal];203 204 UITableView *tableView=[[UITableView alloc]init];205 [tableView setBackgroundColor:[UIColor yellowColor]];206 YYPopMenu *menu=[YYPopMenu popMenuWithContentView:tableView];207 [menu showInRect:CGRectMake(60, 55, 200, 200)];208 menu.dimBackground=YES;209 210 menu.arrowPosition=YYPopMenuArrowPositionRight;211 menu.delegate=self;212 }213 214 215 #pragma mark-YYPopMenuDelegate216 //弹出菜单217 -(void)popMenuDidDismissed:(YYPopMenu *)popMenu218 {219 YYTitleButton *titleButton=(YYTitleButton *)self.navigationItem.titleView;220 [titleButton setImage:[UIImage imageWithName:@"navigationbar_arrow_down"] forState:UIControlStateNormal];221 }222 -(void)pop223 {224 YYLog(@"---POP---");225 }226 -(void)friendsearch227 {228 //跳转到one这个子控制器界面229 YYOneViewController *one=[[YYOneViewController alloc]init];230 one.title=@"One";231 //拿到当前控制器232 [self.navigationController pushViewController:one animated:YES];233 234 }235 236 #pragma mark - Table view data source237 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section238 {239 return self.statuses.count;240 }241 242 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath243 {244 static NSString *ID = @"cell";245 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];246 if (!cell) {247 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];248 }249 250 //取出这行对应的微博字典数据,转换为数据模型251 YYStatusModel *status=self.statuses[indexPath.row];252 cell.textLabel.text=status.text;253 cell.detailTextLabel.text=status.user.name;254 NSString *imageUrlStr=status.user.profile_image_url;255 [cell.imageView setImageWithURL:[NSURL URLWithString:imageUrlStr] placeholderImage:[UIImage imageWithName:@"avatar_default_small"]];256 257 return cell;258 }259 260 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath261 {262 //点击cell的时候,跳到下一个界面263 UIViewController *newVc = [[UIViewController alloc] init];264 newVc.view.backgroundColor = [UIColor redColor];265 newVc.title = @"新控制器";266 [self.navigationController pushViewController:newVc animated:YES];267 }268 269 @end
实现效果:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。