百思不得姐框架(一)
一 框架效果图和原理图
1 框架的效果图:
2 根据总体的app的效果图,我们总结了采用的方案是:
—-> 采用主流的框架来搭建.
搭建效果图:
3 采用纯代码的形式来搭建框架(下面是设置窗口部分代码)
—-> 代码块一:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{}
- 1
- 2
- 3
—-> 3.1 创建窗口
//1.创建窗口self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
- 1
- 2
—-> 3.2 创建窗口的根控制器
//2.设置根控制器//2.1 创建根控制器XFJTabBarController *tabBarController = [[XFJTabBarController alloc] init];self.window.rootViewController = tabBarController;
- 1
- 2
- 3
- 4
—-> 3.3 显示窗口
//显示窗口 [self.window makeKeyAndVisible];
- 1
- 2
二 UITabBarController知识的补充
1 如何查看UITabBarController中有多少个子控制器?
—-> 解答:通过查看tabBar中有多少个按钮.
2 界面显示的时候,为什么默认切换到第0个控制器?
—-> 解答:直接将第0个子控件的view添加上去.
3 点击tabBar上面的按钮,UITabBarController的切换原理?
—-> 解答:点击下面的安妮,就会把对应子控制器view添加上去,移除上一个子控件的view
三 划分项目结构和自定义加载根控制器
1 根据tabBar上面的按钮,设置对应的控制器来管理对应的控制器的业务逻辑.(每个控制器的内部按MVC思想来划分)
2 自定义控制器(通过整个APP的整体结构,我们知道系统的控制器是无法满足需求的,所以我们自定义相应的控制器)
2.1 自定义控制器的好处:方便以后修改需求,如果有需求就直接找到对应的控制器修改就行
2.2 自定义UITabBarController用来管理控制器—>XFJTabBarController
四 添加控制器(由于添加控制器的代码比较多,我们直接抽一个方法,在该方法中直接添加控制器)
#pragma mark - 添加子控制器
- (void)setUpAllChildController
{//设置导航控制器的子控制器XFJEssenceViewController *essence = [[XFJEssenceViewController alloc] init];//创建添加到UITabBarController的根控制器(为导航控制器)UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:essence];//添加控制器到装控制器的数组中[self addChildViewController:nav];// initWithRootViewController -> push// 导航控制器会把栈顶控制器的view添加到上去XFJNewViewController *new = [[XFJNewViewController alloc] init];UINavigationController *nav1 = [[UINavigationController alloc] initWithRootViewController:new];[self addChildViewController:nav1];XFJPublishViewController *publish = [[XFJPublishViewController alloc] init];[self addChildViewController:publish];XFJFriendTrendsViewController *friendThrends = [[XFJFriendTrendsViewController alloc] init];UINavigationController *nav3 = [[UINavigationController alloc] initWithRootViewController:friendThrends];[self addChildViewController:nav3];XFJMeViewController *me = [[XFJMeViewController alloc] init];UINavigationController *nav4 = [[UINavigationController alloc] initWithRootViewController:me];[self addChildViewController:nav4];
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
五 添加tabBar中的按钮图片和标题(这里也抽出一个放方法来,用作添加标题和图片的方法)
1 添加的代码块:
#pragma makr - 设置标题和图片
- (void)setUpWithTitle
{//拿到所有的子控制器UINavigationController *nav = self.childViewControllers[0];//设置对应的控制器的标题nav.tabBarItem.title = @"精华";//未被选中的图片nav.tabBarItem.image = [UIImage imageNamed:@"tabBar_essence_icon"];//添加选中的图片nav.tabBarItem.selectedImage = [UIImage originalWithImage:@"tabBar_essence_click_icon"];UINavigationController *nav1 = self.childViewControllers[1];nav1.tabBarItem.title = @"新帖";nav1.tabBarItem.image = [UIImage imageNamed:@"tabBar_new_icon"];nav1.tabBarItem.selectedImage = [UIImage originalWithImage:@"tabBar_new_click_icon"];UINavigationController *nav2 = self.childViewControllers[2];nav2.tabBarItem.image = [UIImage imageNamed:@"tabBar_publish_icon"];nav2.tabBarItem.selectedImage = [UIImage originalWithImage:@"tabBar_publish_click_icon"];UINavigationController *nav3 = self.childViewControllers[3];nav3.tabBarItem.title = @"关注";nav3.tabBarItem.image = [UIImage imageNamed:@"tabBar_friendTrends_icon"];nav3.tabBarItem.selectedImage = [UIImage originalWithImage:@"tabBar_friendTrends_click_icon"];UINavigationController *nav4 = self.childViewControllers[4];nav4.tabBarItem.title = @"我";nav4.tabBarItem.image = [UIImage imageNamed:@"tabBar_me_icon"];nav4.tabBarItem.selectedImage = [UIImage originalWithImage:@"tabBar_me_click_icon"];
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
2 添加控制器的背景颜色(交给指定的控制器,让控制器自己管理颜色)
六 出现的问题
1 图片选中的图片被渲染了
—-> 解决办法:
—-> 1>直接在对应的图片上设置
—-> 2>用代码的方法设定
1.1 通过设置对应的图片
—-> 图一:
—-> 图二:
—-> 图三:
—-> 图四:
—-> 图五:
1.2 通过代码设置(我们封装一个分类来实现)
//根据一张传入的图片,返回一张未被渲染的图片
+ (UIImage *)originalWithImage:(NSString *)imageName
{//传入一张图片UIImage *image = [UIImage imageNamed:imageName];//返回一张未被渲染的图片return [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2 标题被渲染了
—-> 解决办法:直接用代码设置
—-> 2.1 通过拿到全局的tabBarItem来设置
#pragma mark - 设置选中的控制器的底部标题的字体不被渲染
- (void)setUpTabBarItemAttr
{//获取全局的tabBarItemUITabBarItem *attr = [UITabBarItem appearance];//创建一个字典,用字典来描述选中的字体颜色NSMutableDictionary *dict = [NSMutableDictionary dictionary];//设置选中字体的颜色dict[NSForegroundColorAttributeName] = [UIColor blackColor];[attr setTitleTextAttributes:dict forState:UIControlStateSelected];
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
3 发布的按钮被遮住了
—-> 解决办法一:试着将发布按钮未被选中的状态图片设置为未被渲染的图片(确实可以解决)
—-> 解决后出现的问题:设置完后,点击发布按钮,发现不符合整个app的效果.这样不能解决问题.
4 解决办法二:自定义tabBar(明天介绍)
七 总结
1 以上只是百思不得姐的框架一,里面还有很多的问题没有被解决,后续我们将一 一解决,并且不断的完善百思不得姐的整个app,希望大家持续关注我的官方博客,有什么建议,麻烦大家多多留言,谢谢!!!!
百思不得姐框架(一)相关推荐
- [python爬虫之路day19:] scrapy框架初入门day1——爬取百思不得姐段子
好久没学习爬虫了,今天再来记录一篇我的初入门scrapy. 首先scrapy是针对大型数据的爬取,简单便捷,但是需要操作多个文件以下介绍: 写一个爬虫,需要做很多的事情.比如: 发送网络请求, 数据解 ...
- 精度解析百思不得姐流行框架之精华版
0 框架效果图 一 解说顺序 1 标题部分 2 内容显示部分 3 完好代码 4 知识补充 二 内容显示部分解析 1 搭建: 通过观察该部分执行情况,支持上下滑动,同一时候也支持左右滑动 --> ...
- iOS App 百思不得姐
项目介绍 仿照百思不得姐,通过看视频学习自己实践并简单总结项目开发过程中普遍遇到的问题,并且将可以用到其他项目中的分类方法进行简单总结,便于以后在别的项目中使用. 每天任务 1. 实现相应功能 2. ...
- 高仿百思不得姐(最新版4.5.6)
先上效果图 最新截图 历史截图 1 2 3 4 5 6 7 8 9 10 11 本demo已经实现以下功能 音视频播放器 启动广告 语音.图片评论显示 长文本收缩与展开切换 历史穿越 导航条扩展:包括 ...
- 百思不得姐数据刷新数据部分(七)
一 刷新功能图和内部计算原理图 1 刷新功能图: 2 内部计算原理图 二 解析步骤 1 分析整个精华模块 2 真实数据请求部分 3 模型 4 先添加尾部刷新控件 5 再添加头部刷新控件 6 处理刷新业 ...
- python爬取百思不得姐视频
1 页面分析 百思不得姐视频地址http://www.budejie.com/video/ 看到这个地址的时候我们首先分析,这个地址的多页是如何实现的?访问其他页面时链接是怎么样的?所以我们直接点击页 ...
- 百思不得姐之我的模块功能(六)
一 功能图和知识点 1 功能图部分:(由于网速的原因,网页部分没有加载出来,但是功能完好) 2 该部分能学到的知识点概括: >1 UITableView的使用(简单) >2 UIColle ...
- 百思不得姐之图片处理(保存与下载)
一 功能图 二 讲解思路 1 回顾上一篇内容 2 创建加载图片类(同时创建xib) 3 点击图片查看大图 4 点击查看大图(查看长图) 5 model出展示图片的控制器 6 保存图片 7 封装根据网络 ...
- 爬虫实战——爬百思不得姐
看完了爬虫的入门之后,想实战一下,于是找了一个段子网站--百思不得姐,爬一下段子: 首先进入到 http://www.budejie.com/text/,里面全部是段子,暂时只把段子爬下来,不爬图片, ...
最新文章
- LabVIEW轮廓分析与比较(基础篇—8)
- Linux系统16进制形式查看二进制文件
- 《预训练周刊》第7期:傅立叶图像变换器解析、阿里达摩院发布最大中文预训练语言模型PLUG
- 得到win7 win8的桌面句柄
- js中对函数设置默认参数值的3种方法
- Maven提高篇系列之(五)——处理依赖冲突
- 低差别序列:高维序列(Halton sequence)
- iOS实现经典登录页面,手机号自动格式化
- BZOJ 3994 [SDOI2015]约数个数和 (莫比乌斯反演)
- 为红米寻找新的方向 卢伟冰向网友征集老人机需求
- linux 源码 网络驱动,Linux网络驱动源码分析(一)
- STM32基础分析——USART的DMA模式
- Java中stringbutter_java 中String和StringBuffer与StringBuilder的区别及使用方法
- 网络扫描工具zmap
- linux 系统中没有rpm命令
- CSS · 单行、多行文本溢出显示省略号
- [Codeforces Round #428 DIV2E (CF839E)] Mother of Dragons
- 采用云原生架构:架构演进和成熟度
- unity教程:MMORPG网络游戏如何实现玩家同步
- C# GDAL 数字图像处理Part7 仿射变换图像配准
热门文章
- 什么是BSP票和BSP电子票
- 揭秘弥勒珠芽魔芋多叶生长的相关因素—反式玉米素核苷浓度
- c语言编译load,用C语言写汇编代码之LoadLibrary
- 谷歌眼镜GDK开发指南之动态卡片
- Java设计模式(四):结构性模式(适配器模式、桥接模式、装饰模式、组合模式、外观模式、亨元模式、代理模式)
- Tomcat 部署 war 包
- 世事洞明皆学问,人情练达即文章
- Windows批处理创建、删除隐藏账户,实现远程登录
- Artifact XXX:war exploded: Artifact is being deployed, please wait...(已解决)
- 苹果logo_苹果,太会玩LOGO了~