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后面的便是这个目标

相关文章