欢迎访问宙启技术站
智能推送

Tabbar 的 tabBarItem 图片背景颜色修改

发布时间:2023-05-14 21:54:13

在 iOS 开发中,TabBar 是常用的导航方式之一,而 TabBarItem 是 TabBar 中的选项卡。TabBarItem 默认的样式是由标题和图片组成,而且在系统的设计中,TabBarItem 的背景颜色是与 TabBar 的背景颜色一致的。但是有时候我们希望 TabBarItem 的背景颜色与 TabBar 的背景颜色不一致,以此来实现更好的 UI 效果。那么在这篇文章中,我们将介绍如何修改 TabBarItem 图片背景颜色。

首先,我们先了解一下 TabBarItem 的结构。TabBarItem 由两个部分组成:一个是图片,另一个是标题。在 TabBarItem 中,图片有两种状态:选中状态和非选中状态。选中状态时,图片会显示在 TabBarItem 的顶部;非选中状态时,图片会显示在 TabBarItem 的中间。

修改 TabBarItem 图片背景颜色的方法有很多种,其中比较常用的方法是通过设置图片的渲染模式和颜色来达到目的。具体步骤如下:

1. 查找图片资源

在 Xcode 中,通过点击 Assets.xcassets,可以找到 App 中所有的图片资源,如图:

 

图1. 图片资源

2. 设置渲染模式和颜色

在找到需要修改的图片资源后,我们可以根据需要选择图片的渲染模式和颜色。图片的渲染模式有三种:UIImageRenderingModeAutomatic、UIImageRenderingModeAlwaysOriginal 和 UIImageRenderingModeAlwaysTemplate。

其中,UIImageRenderingModeAutomatic 表示系统会根据图片的不同状态自动选择渲染模式。UIImageRenderingModeAlwaysOriginal 表示图片始终按照原图展示,而 UIImageRenderingModeAlwaysTemplate 表示图片的颜色可以被修改。

如果我们需要设置图片的背景颜色,那么就需要将图片的渲染模式设置为 UIImageRenderingModeAlwaysTemplate。一般来说,将图片的颜色修改为 TabBar 的背景颜色比较合适,因此我们可以使用 TabBar 的 tintColor 属性来设置图片的颜色。具体设置代码如下:

//获取图片资源

UIImage *itemImage = [[UIImage imageNamed:@"home"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

//设置图片

UITabBarItem *tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Home" image:itemImage selectedImage:nil];

//设置图片颜色

tabBarItem.selectedImage = [itemImage imageWithTintColor:self.tabBar.tintColor];

在上述代码中,我们首先获取了图片资源,并将渲染模式设置为 UIImageRenderingModeAlwaysTemplate。接着,创建了一个 UITabBarItem 对象,并使用图片资源设置了 TabBarItem 的图片。最后,我们使用 tintColor 属性将图片颜色设置为和 TabBar 背景颜色相同,以此达到修改图片背景颜色的目的。

需要注意的是,如果我们在 TabBar 的 viewDidLoad 方法中修改 TabBarItem 的颜色,那么在切换 TabBarItem 时,颜色修改会失效。因此,我们需要在 TabBar 的 viewDidAppear 方法中重新设置 TabBarItem 的颜色,以保证颜色修改生效。

3. 改变 TabBarItem 图片颜色的方案

除了使用 tintColor 属性修改图片颜色外,还可以使用 Core Graphics 框架来修改图片的颜色。

Core Graphics 框架是 iOS 中专门用于绘图的框架,可以用来实现各种绘图操作,比如创建图形、修改颜色等。如果我们需要使用 Core Graphics 框架修改 TabBarItem 的图片颜色,可以使用 CGContextRef 绘图上下文,并在上下文中设置颜色和绘图方式来实现。

具体代码如下:

//获取图片资源

UIImage *itemImage = [UIImage imageNamed:@"home"];

//设置颜色

UIColor *color = [UIColor orangeColor];

//设置大小

CGSize size = itemImage.size;

UIGraphicsBeginImageContextWithOptions(size, NO, itemImage.scale);

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextTranslateCTM(context, 0, size.height);

CGContextScaleCTM(context, 1.0, -1.0);

CGContextSetBlendMode(context, kCGBlendModeNormal);

CGRect rect = CGRectMake(0, 0, size.width * itemImage.scale, size.height * itemImage.scale);

CGContextClipToMask(context, rect, itemImage.CGImage);

[color setFill];

CGContextFillRect(context, rect);

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

通过上述代码,我们首先获取了图片资源,并设置了颜色和大小。接着,使用 UIGraphicsBeginImageContextWithOptions 函数创建了一个图形上下文,并设置了绘图的相关属性,包括绘图方式、大小和透明度。在绘制过程中,我们使用 CGContextSetBlendMode 设置了绘图的混合模式,以及设置了绘图的裁剪区域和填充颜色。最后,使用 UIGraphicsGetImageFromCurrentImageContext 函数生成了新的图片对象,并将绘制过程结束。

需要注意的是,使用 Core Graphics 框架修改 TabBarItem 的图片颜色相比使用 tintColor 属性来说,代码量比较大,而且需要一定的绘图技能。因此,如果我们不是很熟悉 Core Graphics 框架,还是建议使用 tintColor 属性来修改 TabBarItem 的图片颜色。

总结

TabBar 是 iOS 开发中常用的导航方式之一,而 TabBarItem 是 TabBar 中的选项卡。TabBarItem 默认的样式是由标题和图片组成,而且在系统的设计中,TabBarItem 的背景颜色是与 TabBar 的背景颜色一致的。但是有时候我们希望 TabBarItem 的背景颜色与 TabBar 的背景颜色不一致,以此来实现更好的 UI 效果。本文介绍了如何通过设置图片的渲染模式和颜色来修改 TabBarItem 的图片背景颜色,以及使用 Core Graphics 框架来实现修改图片颜色的方法。需要注意的是,修改 TabBarItem 图片颜色需要在正确的方法中进行,以保证颜色修改生效。