## 一:效果对比
当我们设置tabBarController的tabBarItem.image的时候,默认情况下会出现图片变成蓝色的效果,这是因为ios7之后会对图片自动渲染成蓝色
代码
~~~
UIViewController *home = [[UIViewController alloc]init];
//设置标题
home.tabBarItem.title = @"首页";
//设置未选中时候的图片
home.tabBarItem.image = [UIImage imageNamed:@"tabbar_home"];
//设置选中时候的图片
home.tabBarItem.selectedImage = [UIImage imageNamed:@"tabbar_home_selected"];
home.view.backgroundColor = [UIColor blueColor];
~~~
效果:![](https://box.kancloud.cn/2016-01-20_569f1d979e85e.jpg)
我们需要改成这样的效果
![](https://box.kancloud.cn/2016-01-20_569f1d97b173c.jpg)
## 二:解决方法
解决方法有两个,一种是用xcode自带的功能设置,另一种是用纯代码的方式来解决——之前猫猫见过自定义的tabBar。。。弱爆了(有增加了一点牛zhuang掰bi手段 )
### 第一种,代码方式解决
代码:
~~~
//首页
UIViewController *home = [[UIViewController alloc]init];
home.tabBarItem.title = @"首页";
home.tabBarItem.image = [UIImage imageNamed:@"tabbar_home"];
UIImage *selImage = [UIImage imageNamed:@"tabbar_home_selected"];
//设置渲染模式为原始
home.tabBarItem.selectedImage = [selImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
home.view.backgroundColor = [UIColor blueColor];
~~~
注意上下对比下原来代码,
### 第二种方法
在图片中找到图片 第三个 –》 render as(渲染器) –》 original image(原始的图片)
![](https://box.kancloud.cn/2016-01-20_569f1d97c3e12.jpg)
![](https://box.kancloud.cn/2016-01-20_569f1d97e9ca6.jpg)
选中第二个 original image 就ok了 不过这方法要挨着设置
## 三:建立UIImage的分类
直接建立分类 一句代码搞定
![](https://box.kancloud.cn/2016-01-20_569f1d9816d64.jpg)
![](https://box.kancloud.cn/2016-01-20_569f1d984141d.jpg)
然后写代码了就是
### UIImage+image.h中的代码
~~~
//
// UIImage+image.h
// 猫猫微博
//
// Created by apple on 15-7-22.
// Copyright (c) 2015年 znycat. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface UIImage (image)
/**
* 加载最原始的图片,没有渲染过
*
* @param imageName 图片名称
*
* @return UIImage对象
*/
+(instancetype)imageWithOriginalName:(NSString *)imageName;
@end
~~~
### UIImage+image.m中的代码
~~~
//
// UIImage+image.m
// 猫猫微博
//
// Created by apple on 15-7-22.
// Copyright (c) 2015年 znycat. All rights reserved.
//
#import "UIImage+image.h"
@implementation UIImage (image)
+(instancetype)imageWithOriginalName:(NSString *)imageName
{
//ios7之后会自动渲染,不让渲染有两种方法
//1:在图片中找到图片 第三个 --》 render as(渲染器) --》 original image(原始的图片)
//2:代码设置
UIImage *image = [UIImage imageNamed:imageName];
//设置渲染模式为原始
return [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}
@end
~~~
## 四:调用
这样调用的时候直接一句代码就可以完成了
首先要在头文件导入
~~~
#import "UIImage+image.h"
~~~
然后调用就这样掉
~~~
home.tabBarItem.selectedImage = [UIImage imageWithOriginalName:@"tabbar_home_selected"];
~~~
偶了
* * *
ps:注意代码抽取,更好用,简单说,两句代码能用一句写,那就抽出来,以前猫猫就是觉得一两句抽不抽的无所谓,复制下就行了,前段时间帮忙做项目吃了大亏 哭一个先,%>_<%
- 前言
- (1)微博主框架-子控制器的添加
- (2)微博主框架-自定义导航控制器NavigationController
- (3)微博主框架-UIImage防止iOS7之后自动渲染_定义分类
- (4)微博自定义tabBar中间的添加按钮
- (5)微博自定义搜索框searchBar
- (6)导航控制器NavigationController 的滑动回退功能实现
- (7)程序启动新特性用UICollectionViewController实现
- (8)用AFNetworking和SDWebImage简单加载微博数据
- (9)微博模型之时间相关重要操作,判断刚刚,昨天,今年等等
- (10)微博cell中图片的显示以及各种填充模式简介
- (11)发送微博自定义TextView实现带占位文字
- (12)发送微博自定义工具条代理实现点击事件
- (13)发送微博调用相机里面的图片以及调用相机