用storyboard设计TabBar至关的快捷、方便。
可是在属性板栗设置TabBarItem背景图片的时候,Selected Image设置的图片颜色明明是红色,可是实际运行后却变为蓝色。
在StoryBoard中搞了好久也没解决,后来查到是要在代码中更改。
UITabItem的头文件,发现下面的内容:
/* The unselected image is autogenerated from the image argument. The selected image
is autogenerated from the selectedImage if provided and the image argument otherwise.
To prevent system coloring, provide images with UIImageRenderingModeAlwaysOriginal (see UIImage.h)
*/
- (instancetype)initWithTitle:(NSString *)title image:(UIImage *)image tag:(NSInteger)tag;
- (instancetype)initWithTitle:(NSString *)title image:(UIImage *)image selectedImage:(UIImage *)selectedImage NS_AVAILABLE_IOS(7_0);
- (instancetype)initWithTabBarSystemItem:(UITabBarSystemItem)systemItem tag:(NSInteger)tag;
意思是,若是不但愿使用系统颜色,须要对图片加上属性UIImageRenderingModeAlwaysOriginal
因此按此方式实验,在对应的TabBarViewController中添加代码以下:
UIImage *homeImageSel = [UIImage imageNamed:@"home_a.png"];
homeImageSel = [homeImageSel imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UITabBarItem *homeItem = [self.tabBar.items objectAtIndex:0];
homeItem.selectedImage = homeImageSel;ide
备注:其实你能够在Assets.xcassets 你放置图片的蓝色文件夹里面一样能够设置,选中你要的图片,而后右边属性 中 正数第二个 Render As 把Default(系统默认颜色--蓝色) 修改为Original Image (保持图片原色)就能够了spa
扩展:设计
着色(Tint Color)是iOS7界面中的一个重大改变,你能够设置一个UIImage在渲染时是否使用当前视图的Tint Color。UIImage新增了一个只读属性:renderingMode,对应的还有一个新增方法:imageWithRenderingMode:,它使用UIImageRenderingMode枚举值来设置图片的renderingMode属性。该枚举中包含下列值:
UIImageRenderingModeAutomatic // 根据图片的使用环境和所处的绘图上下文自动调整渲染模式。 UIImageRenderingModeAlwaysOriginal // 始终绘制图片原始状态,不使用Tint Color。 UIImageRenderingModeAlwaysTemplate // 始终根据Tint Color绘制图片,忽略图片的颜色信息。图片
renderingMode属性的默认值是UIImageRenderingModeAutomatic,it
即UIImage是否使用Tint Color取决于它显示的位置。event