上午+昨晚
本来昨晚要跟新的,但是由于调试bug弄太晚了,都凌晨4点了,就没记录,今天来记录
先看看最新效果(做的比较慢)
效果如下图!
思路:
- 先查看了下APP的组成,发现有好几个页面都有最上面的滚动条,而且整体效果相似,可以将这个提出来做为一个基类,让其他页面直接继承就可以了!这个思路也是以前在网上看到有人这样写过想到的!O O
- 滚动条为UIScrollView + Button
- 下面的TableView是放在UICollection里的,因为看到安卓手机上的界面可以左右滑动(苹果的木有),所以打算用UIcollection来实现这个左右滑的效果
- 滚动条上的文字放大效果直接使用transform属性设置缩放比例即可制作
- 点击button让其显示在正中的效果是改变ScrollView的Offset实现,并不是修改button的位置
注意点:
- 创建UIcollection的时候,要注意设置frame,刚开始我设置frame是
collection = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:flowLayout];
这样会导致UIcollection在左右滑动的时候分页效果是按width = 600 来分页的!所以直接写成了
collection = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, Main_Screen_Width, Main_Screen_Height) collectionViewLayout:flowLayout];
这样就正常了.
- 滑动UIcollection的时候要改变上面的滚动条button,这里要注意数组越界的问题,主要是在最后一个button!注意NSInteger next = last + 1这里,千万千万不能顺手写成last++,刚开始我就是写成了last++,导致了last自增越界
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { //上一个btn NSInteger last = scrollView.contentOffset.x / Main_Screen_Width; //下一个btn NSInteger next = last + 1; UIButton *lastBtn = _titleBtns[last]; UIButton *nextBtn = nil; //防止数组越界,如果点到最后一个,不判断会越界 if (next < self.titleBtns.count) { nextBtn = _titleBtns[next]; } //设置文字大小缩放 lastBtn.transform = CGAffineTransformMakeScale(1.2, 1.2); nextBtn.transform = CGAffineTransformMakeScale(1, 1); //改变按钮颜色 [lastBtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; [nextBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; }
- 创建UIcollection的时候添加子控制器一定要先移除以前的子控制器,在添加新的子控制器
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; //移除以前的子控制器 [cell.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; //把对应的子控制器取出并设置大小 UIViewController *ctr = self.childViewControllers[indexPath.row]; // ctr.view.bounds = Main_Screen_Bounds; ctr.view.frame = CGRectMake(0, 0, Main_Screen_Width, Main_Screen_Height); //将新的子控制器加到contentView上 [cell.contentView addSubview:ctr.view]; return cell; }
- 让button设置在正中的办法
- (void)changeBtnState:(UIButton *)btn { //设置量进行还原 _selectedBtn.transform = CGAffineTransformIdentity; //btn颜色改变 [_selectedBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; //让选中的btn在显示在屏幕正中(是偏移的ScrollView) CGFloat offsetX = btn.center.x - Main_Screen_Width * 0.5; //表明还没有产生偏移量,点的btn还是1/2左边的 if (offsetX < 0) { offsetX = 0; } //最大的偏移量,已经到了最右边超过了1/2,直接设置为最大偏移量 CGFloat maxOffsetX = _topScrollView.contentSize.width - Main_Screen_Width; if (offsetX > maxOffsetX) { offsetX = maxOffsetX; } //改变ScrollView偏移量 [_topScrollView setContentOffset:CGPointMake(offsetX, 0) animated:YES]; //btn的文字缩放 btn.transform = CGAffineTransformMakeScale(1.2, 1.2); //改变btn为selected _selectedBtn = btn; }
以上是昨晚+今天上午的东西!下午继续.以上有些思路也是看了点别人的代码找到的思路!感谢开源.
下午
下午打算写一下数据的东西,我的数据不打算使用API文档,打算用青花瓷(Charles)自己抓
下面说一下我抓数据的过程(我对青花瓷也不是特别熟悉,也是照着教程自己捉摸着抓)打开青花瓷
- 打开青花瓷等待
- 打开手机,在wifi连接下方的HTTP代理处设置电脑的IP,端口8888
-
然后青花瓷会弹出一个对话框,选择allow,忘截图了.
- 然后打开App刷新数据,青花瓷就会有数据了
-
-
-
根据json来写对应的Model