上午+昨晚

本来昨晚要跟新的,但是由于调试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)自己抓

下面说一下我抓数据的过程(我对青花瓷也不是特别熟悉,也是照着教程自己捉摸着抓)打开青花瓷

  1. 打开青花瓷等待
  2. 打开手机,在wifi连接下方的HTTP代理处设置电脑的IP,端口8888
  3. 然后青花瓷会弹出一个对话框,选择allow,忘截图了.

     

  4. 然后打开App刷新数据,青花瓷就会有数据了
  5.  

  6.  

  7.  

    根据json来写对应的Model