关于项目思路的思考

2015-07-28  本文已影响639人  Little_Dragon
// 1.创建窗口
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

    // 2.创建窗口的跟控制器
    // 创建tabBarVc
    UITabBarController *tabBarVc  = [[UITabBarController alloc] init];
    // 设置窗口的根控制器
    self.window.rootViewController = tabBarVc;

    // 添加子控制器
    UIViewController *vc = [[UIViewController alloc] init];

    vc.view.backgroundColor = [UIColor redColor];

    [tabBarVc addChildViewController:vc];

  ...

    // 3.让窗口显示
    [self.window makeKeyAndVisible];
// 由于不确定什么时候有数据加入,所以采用懒加载方式,进行items的加载,加载完成后才进行按钮的创建以及赋值操作,不需要在视图 一创建的时候,就取创建按钮, 节约功耗
- (void)setItems:(NSArray *)items
{
    _items = items;

    for (UITabBarItem *item in items) {

        // 从items中取出模型数据,并将其赋值给对应按钮
        UIButton *btn = [LXLTabBarButton buttonWithType:UIButtonTypeCustom];


        // 设置内容
        [btn setBackgroundImage:item.image forState:UIControlStateNormal];

        [btn setBackgroundImage:item.selectedImage forState:UIControlStateSelected];

        [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchDown];

        btn.tag = self.subviews.count;

        if (self.subviews.count == 0) {
            // 为了程序之处,没有子控件的时候,按钮就已经点击。
            [self btnClick:btn];
        }

        [self addSubview:btn];
    }
}
// 进行子控件的布局, 根据子控件的个数,遍历对每个子控件进行布局
- (void)layoutSubviews
{
    [super layoutSubviews];

    int count = (int)self.subviews.count;

    CGFloat btnW = self.bounds.size.width / count;
    CGFloat btnH = self.bounds.size.height;
    CGFloat btnY = 0;
    CGFloat btnX = 0;
    // 布局按钮的位置
    for (int i = 0; i < count; i++) {
        UIButton *btn = self.subviews[i];

        btnX = i * btnW;

        btn.frame = CGRectMake(btnX, btnY, btnW, btnH);
    }

}

// 监听点击事件, 由于是逆向传值,所以需要代理,来完成点击事件处理,并且传入参数(点击的是哪个按钮)tag ,来完成让控制器的跳转
- (void)btnClick:(UIButton *)btn
{
    _selBtn.selected = NO;
    btn.selected = YES;
    _selBtn = btn;

    // 通知代理点击了哪个角标的按钮
    if ([_delegate respondsToSelector:@selector(tabBar:didClickBtn:)]) {
        [_delegate tabBar:self didClickBtn:btn.tag];
    }
}

// 取得模型数据,并存放在模型数组中
- (void)setUpOneChildViewController:(UIViewController *)vc image:(UIImage *)image selImage:(UIImage *)selImage
{

    // 设置tabBarButton的图片,tabBarButton的内容由对应的子控制器的tabBarItem
    vc.tabBarItem.image = image;
    vc.tabBarItem.selectedImage = selImage;

    // 保存对应子控制器的UITabBarItem
    [self.items addObject:vc.tabBarItem];

    [self addChildViewController:vc];
}

- (void)setUpTabBar
{
    // 1.移除系统的tabBar,移除系统自带的tabBarButton
    [self.tabBar removeFromSuperview];
    NSLog(@"%@",self.tabBar);

    // 2.添加自己的tabBar
    LXLTabBar *tabBar = [[LXLTabBar alloc] init];

    tabBar.delegate = self;

    // tabBar按钮的个数,由tabBar子控制器个数决定
//    tabBar.count = (int)self.childViewControllers.count;
    // 传对应子控制器的tabBarItem数组
    tabBar.items = self.items;

    tabBar.backgroundColor = [UIColor greenColor];

    tabBar.frame = self.tabBar.frame;

    [self.view addSubview:tabBar];

}

// 遵守协议实现代理方法,进行界面的跳转。
#pragma mark  -LXLTabBarDelgate方法
// 当点击tabBar上的条的时候调用
- (void)tabBar:(XMGTabBar *)tabBar didClickBtn:(NSInteger)index
{
    // 切换界面
    self.selectedIndex = index;
}
// 判断是否是最后一个cell,可以根据indexPath进行判断
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{

  ...

    // 给最后一个cell添加一个立即体验按钮
    // 告诉cell是否是最后一个
    // 宏定义数目为4
    [cell setIndexPath:indexPath count:LXLPage];
//    [cell setIndexPath:indexPath count:4]
//    if (indexPath.item == XMGPage - 1) {
//        // 添加立即体验按钮
//
//    }

    return cell;
}
// 用来判断下当前cell对象是否是最后一个cell
- (void)setIndexPath:(NSIndexPath *)indexPath count:(int)count
{
    if (indexPath.item == count - 1) {
        // 最后一个cell
        // 添加一个立即体验按钮,首先保存整个cell只有一个体验按钮

        // 显示这个按钮
        self.startBtn.hidden = NO;

    }else{ // 不是最后一个cell

        // 隐藏这个按钮,涉及到循环引用,否则就会被别的cell所引用。
        self.startBtn.hidden = YES;
    }
}

- (UIButton *)startBtn
{
    if (_startBtn == nil) {
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
        _startBtn= btn;

        [btn setBackgroundImage:[UIImage imageNamed:@"guideStart"] forState:UIControlStateNormal];

        // 尺寸可以进行自适应'自己根据图片来安排大小'
        [btn sizeToFit];
        // 位置确定
        btn.center = CGPointMake(self.width * 0.5 , self.height * 0.9);
        [self.contentView addSubview:btn];
    }

    return _startBtn;
}

// 点击立即体验按钮的时候调用
- (void)start
{
    // 跳转到主框架界面。界面之间跳转,导航控制器,tabBarVc,modal

    // 不能使用modal原因:新特性界面一直存在,被窗口的根控制器一直强引用

    LXLTabBarController *vc = [[LXLTabBarController alloc] init];

    // 设置窗口的根控制器为主框架控制器
   [UIApplication shareApplication].keyWindow.rootViewController = vc;
}

- (viod)viewDidLoad{
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    [btn setImage:[UIImage imageNamed:@"guideStart"] forState:UIControlStateNormal];
    [btn sizeToFit];
    // 初始化位置直接设置在 最终位置,而且只创建一次,不必思考情况
    btn.center = CGPointMake(self.collectionView.width * (LXLPageCount - 0.5), self.collectionView.height * 0.9);
    [self.collectionView addSubview:btn];
    [btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
}
// 跳转控制器
- (void)btnClick
{
     LXLTabBarController *vc =[[LXLTabBarController alloc]init];

    [UIApplication sharedApplication].keyWindow.rootViewController =vc;
}

上一篇 下一篇

猜你喜欢

热点阅读