缓解TabBarButton图片渲染。iOS项目——基本框架搭建,ios基本框架搭建。

by admin on 2018年9月19日

1.缓解TabBarButton图片渲染

iOS项目——基本框架搭建,ios基本框架搭建

  项目支出过程被,在成功iOS项目——项目开支环境搭建此后,我们首先需要考虑的就算是咱的类型的完好框架和导航架构设计,然后在斯基础及考虑功能模块的成就。

简单种方法:

相同 导航架构设计

  一款App的导航架构设计应该是相符人们的操作惯性和有利操作的性状,也应有以竞相上进一步合理和人性化。根据项目效益及永恒不同,不同的App的领航设计应运用不同之技术框架,目前比较大的领航框架主要出标签式、列表式、矩阵式三深接近,如下图,具体每一样像样的特征以及详情可瞻仰:重新谈App导航设计

现阶段资讯新闻类的位移端项目的主流App框架基本都是标签式的,这种类型的领航设计技术及大都还是经TabBar
+
NavigationController框架进行搭建完成,大家常常利用到的微博、今日条漫漫等都是下TabBar

  • NavigationController这样的框架。TabBar +
    NavigationController就是在应TabBar上添加itemBar,每一个itemBar都是一个单身的模块,并且每一个itemBar都对应一个NavigationController。因为各级一个itemBar的导航器都不相同,所以应当是先来TabBar
    再来NavigationController。

  我们的种类为属于资讯类,所以我们的类别之框架为是下TabBar +
NavigationController进行搭建。今天我们的机要任务就是长建筑我们TabBar,如果采取系统自带的UITabBarController(官网文档戳这里),在利用过程发生瞬间几乎点得专注:

  • 各一个barItem都必须相应一个ViewController,可以是形似的ViewController,也足以是UINavigationController
  • barItem对应之ViewController或UINavigationController的frame如果从定义设置了,注意不要遮挡最下面的TabBar条
  • barItem的相继与丰富到UITabBarController的相继保持一致
  • 当添加的barItem个数 <=
    5独时,均匀分布于极度下面的bar条上,如达到图所显示之4单
  • 当添加的barItem个数 >
    5单时,会只有展示前四只增长的barItem,然后加上一个【more】,点击【more】弹来一个列表可摘,并且列表的下手上较量有一个【edit】按钮,点击后好调barItem的示顺序,如下图所出示,所以TabBar +
    NavigationController框架下的barItem个数最好不要超过5只,否则用户体验不是十分好

图片 1 
  图片 2

  • 添加itemBar对应之ViewController的办法来个别种植:一凡是以UITabBarController的 setViewControllers: 方法设置;二凡为此UIViewController的 addChildViewController: 方法上加子视图,也足以兑现增长到tabBar的功能,但这种艺术对barItem个数 >
    5的当儿,只见面显示前五只,剩下的未见面冒出不时出,也从来不【more】按钮可以选取

以身作则代码如下,自定义一个TabBarController继承自UITabBarController,然后重新写那 viewDidLoad 方法上加子视图和标签: 

@implementation XMGTabBarController

- (void)viewDidLoad {
    [super viewDidLoad];

    //添加4个item bar
    UITableViewController *vc0 = [[UITableViewController alloc] init];
    vc0.view.backgroundColor = [UIColor redColor];
    vc0.tabBarItem.title = @"精华";
    vc0.tabBarItem.image = [UIImage imageNamed:@"tabBar_essence_icon"];
    vc0.tabBarItem.selectedImage = [UIImage imageNamed:@"tabBar_essence_click_icon"];
    [self addChildViewController:vc0];

    UIViewController *vc1 = [[UIViewController alloc] init];
    vc1.view.backgroundColor = [UIColor blueColor];
    vc1.tabBarItem.title = @"新帖";
    vc1.tabBarItem.image = [UIImage imageNamed:@"tabBar_new_icon"];
    vc1.tabBarItem.selectedImage = [UIImage imageNamed:@"tabBar_new_click_icon"];
    [self addChildViewController:vc1];

    UITableViewController *vc2 = [[UITableViewController alloc] init];
    vc2.view.backgroundColor = [UIColor greenColor];
    vc2.tabBarItem.title = @"关注";
    vc2.tabBarItem.image = [UIImage imageNamed:@"tabBar_friendTrends_icon"];
    vc2.tabBarItem.selectedImage = [UIImage imageNamed:@"tabBar_friendTrends_click_icon"];
    [self addChildViewController:vc2];

    UIViewController *vc3 = [[UIViewController alloc] init];
    vc3.view.backgroundColor = [UIColor grayColor];
    vc3.tabBarItem.title = @"我";
    vc3.tabBarItem.image = [UIImage imageNamed:@"tabBar_me_icon"];
    vc3.tabBarItem.selectedImage = [UIImage imageNamed:@"tabBar_me_click_icon"];
    [self addChildViewController:vc3];

     //下面的方法也是可以的,推荐使用下面的方法
//    [self addChildViewController:@[vc0,vc1,vc2,vc3]];

}

1.直选中全部图片,修改一个属性:Render as    选择:Original Image

亚 开发过程中注意代码重构

 在开进程被,我们无限不用还写相同的代码,因此,在付出进程遭到,我们用针对我们的代码进行重构和简化,主要条件是竭尽保持一个计实现一个成效,然后尽量不写重复的代码,精简逻辑。在我们面前添tabBar
item的代码中虽存大气重复性的代码,所以我们需要对那进展重构,将重复性的代码进行抽取,将不同的始末装成参数进行自定义设置,重构后的逻辑如下:

@implementation XMGTabBarController

- (void)viewDidLoad {
    [super viewDidLoad];

    /**** 添加子控制器 ****/
    [self setupOneChildViewController:[[UITableViewController alloc] init] title:@"精华" image:@"tabBar_essence_icon" selectedImage:@"tabBar_essence_click_icon"];
    [self setupOneChildViewController:[[UITableViewController alloc] init] title:@"新帖" image:@"tabBar_new_icon" selectedImage:@"tabBar_new_click_icon"];
    [self setupOneChildViewController:[[UIViewController alloc] init] title:@"关注" image:@"tabBar_friendTrends_icon" selectedImage:@"tabBar_friendTrends_click_icon"];
    [self setupOneChildViewController:[[UITableViewController alloc] init] title:@"我" image:@"tabBar_me_icon" selectedImage:@"tabBar_me_click_icon"];
}

/**
 *  初始化一个子控制器
 *
 *  @param vc            子控制器
 *  @param title         标题
 *  @param image         图标
 *  @param selectedImage 选中的图标
 */
- (void)setupOneChildViewController:(UIViewController *)vc title:(NSString *)title image:(NSString *)image selectedImage:(NSString *)selectedImage
{
    vc.view.backgroundColor = [UIColor redColor];
    vc.tabBarItem.title = title;
    vc.tabBarItem.image = [UIImage imageNamed:image];
    vc.tabBarItem.selectedImage = [UIImage imageNamed:selectedImage];
    [self addChildViewController:vc];
}

@end

2.抽取UIImage分类,提供不要渲染的道

三 UITabBarItem设置 

  在iOS开发进程被,系统自带的长空有时候会拿略图片展示出来时自动渲染成蓝色,例如自带的TabBarItem在当选时之图形,还有设置UIButtonTypeSystem样式时按钮的图样,这时候系统还见面自动渲染成蓝色。

vc.tabBarItem.selectedImage = image;

UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];
[btn setImage:image forState:UIControlStateNormal];

为什么要包到分类 ?    提高艺术的复用性

3.1 image的渲染问题  

  我们于开进程被有时并不需要这种渲染,只望开的App按咱们设定的图形展开展示就哼了,这是咱就算得对图纸展开取缔渲染的设定及操作。有半点种植缓解方案:

  • 还出相同摆设无见面进展渲染之图样

    // 加载图片
    UIImage *tempImage = [UIImage imageNamed:@"tabBar_essence_click_icon"];
    // 产生一张不会进行自动渲染的图片
    UIImage *selectedImage = [tempImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    vc.tabBarItem.selectedImage = selectedImage;
    
  • 直在xcassets文件被配备图片未深受渲染

 

3.修改插件   目的:让好补加图的方,也产生插件的提醒意义

3.2 设置TabBarItem的亲笔性

   以上述我们帮图片修改以后,虽然tabBarItem的图片可以完全以我们设定的图纸展开亮,但是
在支付过程被,我们许多时段还用对tabBarItem的题的书体、字号等字性进行设定。要设定tabBarItem的契性,我们也发出个别种缓解方案:

  • 直白装各一个tabBarItem对象

    // 普通状态下的文字属性
    NSMutableDictionary *normalAttrs = [NSMutableDictionary dictionary];
    normalAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:14];
    normalAttrs[NSForegroundColorAttributeName] = [UIColor grayColor];
    [vc.tabBarItem setTitleTextAttributes:normalAttrs forState:UIControlStateNormal];
    
    // 选中状态下的文字属性
    NSMutableDictionary *selectedAttrs = [NSMutableDictionary dictionary];
    selectedAttrs[NSForegroundColorAttributeName] = [UIColor darkGrayColor];
    [vc.tabBarItem setTitleTextAttributes:selectedAttrs forState:UIControlStateSelected];
    

    需要留意的是:

    // 字典中用到的key
    1.iOS7之前(在UIStringDrawing.h中可以找到)
    - 比如UITextAttributeFont\UITextAttributeTextColor
    - 规律:UITextAttributeXXX
    
    2.iOS7开始(在NSAttributedString.h中可以找到)
    - 比如NSFontAttributeName\NSForegroundColorAttributeName
    - 规律:NSXXXAttributeName
    
  • 透过UITabBarItem的appearance对象统一设置

    /**** 设置所有UITabBarItem的文字属性 ****/
    UITabBarItem *item = [UITabBarItem appearance];
    // 普通状态下的文字属性
    NSMutableDictionary *normalAttrs = [NSMutableDictionary dictionary];
    normalAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:14];
    normalAttrs[NSForegroundColorAttributeName] = [UIColor grayColor];
    [item setTitleTextAttributes:normalAttrs forState:UIControlStateNormal];
    // 选中状态下的文字属性
    NSMutableDictionary *selectedAttrs = [NSMutableDictionary dictionary];
    selectedAttrs[NSForegroundColorAttributeName] = [UIColor darkGrayColor];
    [item setTitleTextAttributes:normalAttrs forState:UIControlStateSelected];
    

3.1什么样找到插件的安装位置

3.3 UIAppearance

  只要一个近似遵守UIAppearance,就能获得全局的外观,UIview都好取得有的外观,我们得得到具有的tabBarItem外观标识,但是,一般不要下面这种,因为下面这种方式得到之是大局的具有tabBarItem外观标识,我们当支付时,一般都是温馨担当好出的一些,所以推举用下第二栽办法,只得到当前接近的tabBarItem外观标识。

//获取全局的tabBarItem外观标识
UITabBarItem *item = [UITabBarItem appearance];

//获取当前这个类下面的所有tabBarItem
UITabBarItem *item = [UITabBarItem appearanceWhenContainedIn:self, nil]

  appearance使用注意:一定要是当控件显示之前安装才发因此,一般会放在+
(void)load方法吃而不居+(void)initialize中,因为+
(void)load方法只有见面调用一糟糕,+(void)initialize可能会见调用多次,使用时还得判定。

  • load方法:加载类的时调用,类在什么时候加载呢?程序一样起动就调用load方法
  • Initialize方法:初始化类,当第一差采用这仿佛或子类的时候调用
  • viewdidload方法:当viewcontroller第一软将显示的时刻加载。viewController都是懒加载,即都是当将显示出来时才加载viewdidLoad,但是只有
    tabbarcontroller是在相同创控制器的上就是进展加载viewdidLoad。

浅析:插件是装于处理器的达成的,安装及哪里,插件的章程中肯定会供

季 pch文件的定义

  PCH文件(Precompile Prefix Header
File),也不怕是预编译头文件,其打算就是,有利而一次性导入在多单文本被又利用的腔文件、宏或者URL地址等(全局使用),可以使得之扶植您省时间,提高开支效率。但是,自从Xcode
5之后,这个文件默认就不再提供了,如果你还眷恋延续以以来,需要手动创建并配备。至于怎么默认不再供,可能是由于提高编译效率方面的设想,毕竟预编译为会增长Build的时。

  具体怎么着创造及布局PCH文件详情可瞻仰:ios中pch文件之创造同布局

  下面是当编制PCH文件要专注的一些景象: 

#ifndef PrefixHeader_pch
#define PrefixHeader_pch

/*** 如果希望某些内容能拷贝到任何源代码文件(OC\C\C++等), 那么就不要写在#ifdef __OBJC__和#endif之间 ***/


/***** 在#ifdef __OBJC__和#endif之间的内容, 只会拷贝到OC源代码文件中, 不会拷贝到其他语言的源代码文件中 *****/
#ifdef __OBJC__


#endif
/***** 在#ifdef __OBJC__和#endif之间的内容, 只会拷贝到OC源代码文件中, 不会拷贝到其他语言的源代码文件中 *****/


#endif

找到插件的源代码,进入源代码搜索     搜索什么要字也?   在哪搜索?

五 在Build Setting中配置宏 

  宏定义除了于类似中因故#define进行定义之外,在iOS开发过程中,我们还好由此以Build
Setting中展开配置宏,而以Build
Setting中定义的宏在项目受到见面找不顶,就是咱透过【command】+【鼠标单击】会来得一个【?】,无法过到对应定义的职务,这时候可能就是是部署当Build
Setting中,例如我们常见到的宏 DEBUG 就部署在部署于Build Setting中。

注意点:Build
Setting中配备的宏的名字不能够尽凡是小写字母
,如果宏的名全部凡稍微写,
会出现以下错误 

 

http://www.bkjia.com/IOSjc/1300877.htmlwww.bkjia.comtruehttp://www.bkjia.com/IOSjc/1300877.htmlTechArticleiOS项目——基本框架搭建,ios基本框架搭建
项目开支进程中,在成功 iOS项目类别开环境搭建
之后,我们先是需要考虑的饶是咱的项目…

command+f 搜索?   不得以  只能于手上接近吃追寻

大局搜索点放大镜图标搜索以及途径相关的严重性字,一个一个试行一下(path,file)  
 试过以后察觉 install_path能找到安装路径

自此察觉LIBRARY(library)这个文件找不交?       其实是文件就是资源库

以当时之前若事先了解怎么咱们电脑的目(文件夹名字)有的是中文,有的是英文??

首先要先行安装好之微处理器隐藏的文书可见,  
然后发现中文的文本夹下都有一个本地化文件

本地化文件:会基于电脑安装的语言,把文件夹名称翻译成对应之言语

我们把资源库中之之文件去就发现资源库名称改成了library了

2.解决TabBarButton标题渲染

看看题目让渲染成蓝色,我们顿时要想到马上是TabBar的主题颜色(默认是蓝色)tintColor

这就是说我们且设置标题的性质

按钮标题 => 按钮内容 => 对应子控制器的tabBarItem

岂设置按钮标题颜色?     一不好只能设置一个

透过tabBarItem:模型可以安装那么通过哪个属性修改也?

咱得进tabBarItem头文件去追寻,但是找不顶    
 那么我们便错过tabBarItem它的父类去探寻, 找到一个方法

– (void)setTitleTextAttributes:(nullable NSDictionary *)attributes
forState:(UIControlState)state NS_AVAILABLE_IOS(5_0)
UI_APPEARANCE_SELECTOR;

Attributes富文本:可以设置文字颜色,字体,阴影,图文混排

叙述文本属性,通过key,和value去设置文字性

NSMutableDictionary*attr = [NSMutableDictionarydictionary];

attr[NSForegroundColorAttributeName] = [UIColorblackColor];

[itemsetTitleTextAttributes:attrforState:UIControlStateSelected];

怎用到独具的TabBarButton?

拿不至TabBarButton,我们只能将到TabBarItem
,并且了解修改TabBarItem能达修改TabBarButton的目的(MVC思想)

然而修改TabBarItem一潮只能修改一个,如何一次性修改所有的TabBarItem?

好经+
(
instancetype)appearance;其一仿佛方式将到有的TabBarItem

// 获取所有UITabBarItem

UITabBarItem*item = [UITabBarItemappearance];

注意:通过选中状态设置文字字体是颇的,没有功效

NSMutableDictionary*attr = [NSMutableDictionarydictionary];

字典的key值怎么传??   ——> 看这个主意的描述——>using the keys found
in NSAttributedString.h.

——>去是仿佛中找到队形的key       UIkit—>NSAttributedString.h

attr[NSFontAttributeName] = [UIFontsystemFontOfSize:13];

[itemsetTitleTextAttributes:attrforState:UIControlStateNormal];

只有经Normal状态下设置才行

attr[NSForegroundColorAttributeName] = [UIColorblackColor];

[itemsetTitleTextAttributes:attrforState:UIControlStateSelected];

除非当展示之前设置才会立竿见影一般我们管这些设置写在+(void)load  方法中  
这个主意才见面加载一整整

// 什么时调用:第一不好加载类的时候调用

// 只会调用一不行

+ (void)load  {  }

// 什么时调用:第一不善使用类或者其的子类的当儿调用

// 有或会见调用多次

+ (void)initialize {  }

注意点:

1.外对象都能下appearance吗?

勿是   只有遵守UIAppearance协议 (或父类遵守)  才会应用appearance

2.其他性质都可行使appearance设置也?

不能

3.怎么样性可以透过appearance设置?    ——>去探视属性的分别

无非发生隐含UI_APPEARANCE_SELECTOR宏属性,才能够去装

4.只要用appearance设置属性,必须要在显示之前去设置.

5.施用appearance设置某些性能,那这些性在满工程中都见效

3.修改TabBarButton的位置

发觉TabBar中间位置设置了图未显示———>原因是图表被渲染———>为什么正常状态下图片会叫渲染———>图片太要命(图片超出了TabBar的限)

图位置怎么改———>修改frame———>此方不可行———>那么还有那些方法可以改图片的岗位吗??

改图片的内间距    可以办到      那么这个特性名字是啊??
 ———>去头文件找——> 找不交就是错过父类找

咱俩找到imageInsetsz这个特性可以修改

vc2.tabBarItem.imageInsets=UIEdgeInsetsMake(7,0, -7,0);

小心:有些时候我们找到了能用之习性,但是咱透过一个靶却束手无策调用这个特性

原因:调用对象非对准.    我们进头文件去找到的性质可能是另类的习性  
我们若因此相应的接近对象去调用这个特性

怎找到真正会调用属性之好像对象??       一直朝着上找寻,找到interface  
interface后面的饶是此目标

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图