码迷,mamicode.com
首页 > 其他好文 > 详细

娱乐大咖项目- 总结

时间:2016-03-06 23:18:18      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:

一,基本配置

1.首先的需要搭配一些骨架,本项目采用的根控制器时以TabBarController为根控制器。

 

第一个修改点: 

image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

这句是使图片保持以前的样子,而不被系统修改为蓝色

上述是代码,也可以通过Assets.xcassets也就是专门管理图片的,点击修改图片的一个属性即可,改为Rende As 改为Original Image就可以

第二个修改点:

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

    NSMutableDictionary *dict = [NSMutableDictionary dictionary];

    dict[NSFontAttributeName] = [UIFont systemFontOfSize:13];

    dict[NSForegroundColorAttributeName] = [UIColor whiteColor];

    [vc.tabBarItem setTitleTextAttributes:dict forState:UIControlStateNormal];

// 上述就是单独修改控制器下TabBarItem中文字颜色当被点击时,不被系统改动,当然也有一个更好的方法.

// 通过UitabBarItem中Appearance的属性来修改多个Item中文字的属性更改

NSMutableDictionary *attrs = [NSMutableDictionary dictionary];
    attrs[NSFontAttributeName] = [UIFont systemFontOfSize:12];
    attrs[NSForegroundColorAttributeName] = [UIColor grayColor];
    
    NSMutableDictionary *selectedAttrs = [NSMutableDictionary dictionary];
    selectedAttrs[NSFontAttributeName] = attrs[NSFontAttributeName];
    selectedAttrs[NSForegroundColorAttributeName] = [UIColor darkGrayColor];
    
    
    UITabBarItem *item = [UITabBarItem appearance];
    [item setTitleTextAttributes:attrs forState:UIControlStateNormal];
    
    [item setTitleTextAttributes:selectedAttrs forState:UIControlStateSelected];

 这样也就可以通过多个子控制器中,只需要设置一次就可以满足所有其当中属性更改,当然也需要方法后面有

UI_APPEARANCE_SELECTOR;才能利用Appearance统一设置

2.自定义子控器

// 建立一个初始化子控制器的方法
- (void)setUpChildVc:(UIViewController *)vc title:(NSString *)title image:(NSString *)Image selectedImage:(NSString *)selectedImage{
vc.tabBarItem.title
= title; vc.tabBarItem.image = [UIImage imageNamed:Image]; vc.tabBarItem.selectedImage = [UIImage imageNamed:selectedImage]; // 包装一个导航控制器, 添加导航控制器为tabbarcontroller的子控制器 ZWNavigationController *naVc = [[ZWNavigationController alloc]initWithRootViewController:vc]; [self addChildViewController:naVc]; }

这样就方便简化ViewDidload中的代码量,也同时减少了代码冗余。

项目截图:如果要的得到类似的TabBar控制器的话,就必须得自定义

技术分享

 

2.2 自定义TabBar

// 更换tabBar
    //    self.tabBar = [[XMGTabBar alloc] init]; tabar属性为只读属性,所以可以通过kvc的方式来替换系统的tabbar
    [self setValue:[[ZWTabBar alloc] init] forKeyPath:@"tabBar"];

通过KVC的方式来修改_TabBar来达到修改TabBar的属性

然后通过layoutSubviews的方法来改变所需TabBar的样式

- (void)layoutSubviews
{
    [super layoutSubviews];
    CGFloat width = self.width;
    CGFloat height = self.height;
    
    // 设置发布按钮的frame
    self.publishButton.bounds = CGRectMake(0, 0, self.publishButton.currentBackgroundImage.size.width , self.publishButton.currentBackgroundImage.size.height);
    
    self.publishButton.center = CGPointMake(width * 0.5, height * 0.5);
    
    // 设置其他UITabBarButton的frame
    CGFloat buttonY = 0;
    CGFloat buttonW = width / 5;
    CGFloat buttonH = height;
    NSInteger index = 0;
    for (UIView *button  in self.subviews) {
         if (![button isKindOfClass:[UIControl class]] || button == self.publishButton) continue;
        // 计算按钮的x值
        CGFloat buttonX = buttonW * ((index > 1)?(index + 1):index);
        button.frame = CGRectMake(buttonX, buttonY, buttonW, buttonH);
        
        // 增加索引
        index++;
    }

}

 通过上述代码就能得到上述图片的样式.

 

 

 

 

娱乐大咖项目- 总结

标签:

原文地址:http://www.cnblogs.com/zw-ios/p/5248904.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!