• AJ学IOS 之微博项目实战(3)微博主框架-UIImage防止iOS7之后自动渲染_定义分类


    AJ分享,必须精品

    一:效果对比

    当我们设置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];
    

    效果:这里写图片描述

    我们需要改成这样的效果

    这里写图片描述

    二:解决方法

    解决方法有两个,一种是用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(原始的图片)
    这里写图片描述

    这里写图片描述

    选中第二个 original image 就ok了 不过这方法要挨着设置

    三:建立UIImage的分类

    直接建立分类 一句代码搞定

    这里写图片描述

    这里写图片描述

    然后写代码了就是

    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"];
  • 相关阅读:
    HDU1852 Beijing 2008(快速幂+特殊公式)
    HihoCoder 1570 : 小Hi与法阵(简单几何)
    【转】反素数
    【整理】线段树30题
    SPOJcot2 Count on a tree II (树上莫队)
    【总结】曼哈顿距离转切比雪夫距离
    【初识】树上分块
    基于Tablestore Tunnel的数据复制实战
    【New Feature】阿里云快照服务技术解析
    基于日志服务的GrowthHacking(1):数据埋点和采集(APP、Web、邮件、短信、二维码埋点技术)
  • 原文地址:https://www.cnblogs.com/luolianxi/p/4990307.html
Copyright © 2020-2023  润新知