设置tabBarItem的图片渲染

来源:互联网 发布:管家婆软件怎么安装 编辑:程序博客网 时间:2024/06/10 04:30


在自定义tabbar的时候回遇到这样的问题:

  • 将美工给的图片设置为tabBarItem的selectImage,美工给的图片的是这样子的:

    这里写图片描述
    ,但是设置好以后现实的图片是这样的:

    这里写图片描述

问题原因:

  • 系统默认对tabBarItem的图片进行了渲染。

解决办法:

  • 设置图片的渲染模式:UIImage.renderingMode

    是使用imageWithRenderingMode:方法对设置图片的renderingMode属性进行设置。

    代码如下:

```objective-c[seletcImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];```问题解决系统不会再对图片进行渲染,而是直接使用原图。

思考:

  • 能不能自定义设置tabBarItem的selectImage的颜色?

    我们看一下UIImage的renderingMode属性

  • UIImageRenderingModeAutomatic // 根据图片的使用环境和所处的绘图上下文自动调整渲染模式。

  • UIImageRenderingModeAlwaysOriginal // 始终绘制图片原始状态,不使用Tint Color。
  • - UIImageRenderingModeAlwaysTemplate // 始终根据Tint Color绘制图片,忽略图片的颜色信息。

    系统默认属性1,显然能帮助我们设置颜色的属性值应该是3。那么问题又来了?什么是tint color?

tint Color:

  1. tintColor是描述线条轮廓的一种颜色,该颜色默认具有传递性,默认状态下最底部的视图的tintcolor会一直往上面的视图传递。

  2. 如果子视图改变了tintcolor那么将会和父视图的tintColor不一样;传递链从此处断开。

  3. navagation的item的 tintColor和controller自带的View不是在同一层次上;改变controller的view的tintColor对navagation的tintColor没有颜色。

  4. 由于,tintColor的特性,我们可以对镂空的图片(如tabbar的image和 BarButtonItem的image)进行设置tintColor就可以设置改变镂空图片的颜色。

解决思路来了。。。只要找到selectImage的父视图然后设置父视图的tint color。再设置selectImage图片的rendingMode为UIImageRenderingModeAlwaysTemplate。那么父视图的tint color 就会被渲染到图片上了。

代码:

    self.tabBar.tintColor = [UIColor purpleColor];//设置成紫色    vc.tabBarItem.selectedImage = [seletcImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];//这里的seletcimjage变量是传入的图片

效果


设置后的图片

,这样我们就能通过设置父视图的tint color来渲染我们想要的颜色了。

0 0
原创粉丝点击