新浪微博-开发过程
10月26号
一、环境搭建 1.屏幕方向改为仅支持正常的竖屏 2.启动程序时隐藏状态栏 3.修改软件名称 4.去除图标玻璃质感效果 二、判断用户是否第一次使用这个版本 1.将沙盒中的版本号和info.plist中的版本号进行比较 2.第一次使用:显示版本新特性界面 3.非第一次使用:显示主界面(显示状态栏) 三、版本新特性界面 1.自定义控制器的view-UIImageView 2.添加UIScrollView和内部的图片 3.添加UIPageControl 4.添加UIScrollView最后一个界面的分享和开始按钮 5.全屏图片屏幕适配 * .png * @2x.png * -568h@2x.png
10月27号
一、主界面 1.设计Dock类 * 底部的选项条 * 用来存放多个选项卡标签 2.让Dock提供一个添加标签(Item)的方法 * 比如方法: // icon是标签的图标 // title是标签的文字 - (void)addItemWithIcon:(NSString *)icon title:(NSString *)title; * 根据icon和title创建item * 添加item * 监听item点击 * 按照添加顺序调整所有的item的frame 3.设计DockItem类 * 代表一个选项卡标签 * 继承自UIButton * 实现相应方法来调整内部图片和文字的位置 4.抽取NSString的分类,用来往文件名后面拼接字符串 5.为Dock添加代理 * 代理的作用是监听Dock上DockItem(选项卡\标签)的点击 6.初始化子控制器 * 如果子控制器需要导航条,就包装一个UINavigationController * 点击标签的时候切换对应的子控制器 * 移除旧子控制器的view,添加新子控制器的view 7.设置导航主题 * 目的是保证整个项目中所有导航栏和按钮的样式一致 * 自定义一个导航控制器,在里面设置导航栏和导航按钮的主题 * 使用导航控制器 8.给UIBarButtonItem抽取一个分类 * 快速创建一个显示2张不同图片的UIBarButtonItem 9.Dock的抽取和封装 * Dock * DockItem * DockController
10月29号
一、更多 1.加载More.plist,读取表格信息 2.给每一行Cell设置对应的背景图片(backgroundView和selectedBackgroundView) 1> 如果一组只有一行,就设置4个圆角的背景图片 2> 如果一组有多行 * 首行:设置上面有2个圆角的背景图片 * 末行:设置下面有2个圆角的背景图片 * 中间行:设置没有圆角的背景图片 3.添加底部的“退出当前账号”红色按钮(tableViewFooterView) 4.设置每个Cell右边的箭头或者文字(accessoryView) 5.设置每一组头部和尾部的高度(sectionHeaderHeight和sectionFooterHeight) 6.封装cell 1> 目的:将设置cell内部属性的代码封装到cell中,比如背景图片、右边的view 2> 需要提供的接口 * 设置所在的tableView * 设置行号(indexPath) * 设置cell的类型(右边显示什么东西)
10月30号
一、授权页面 1.用webView加载登录页面 2.在webView的代理方法中拦截所有请求 3.拦截到回调地址的请求 * 返回NO,不让它跳转 * 截取code=后面的请求标记(Request Token) 4.利用Request Token发送post请求换取accessToken 5.增加MBProgressHUD指示器 6.编写一个HttpTool封装get\post请求 7.编写一个AccountTool存储账号信息 二、主页面 1.发送请求获取微博数据,展示微博内容和用户名 2.封装模型Status、User 3.封装一个StatusTool,专门用来管理微博数据
11月1号
一、主页面(第一个版本) 1.添加SDWebImage框架,下载用户头像 2.根据微博内容和用户昵称算出Cell的高度 二、主页面(第二个版本) 1.自定义一个StatusCell,添加可能出现的所有子控件 2.设计一个StatusCellFrame对象,专门用来存储每一个Cell内部所有子控件的frame 3.在tableView代理方法中创建StatusCellFrame,返回cell的高度 4.在tableView数据源方法中创建StatusCell,设置cell对应的StatusCellFrame 5.在设置cell的StatusCellFrame时,设置每个子控件的frame和数据
10月2号
一、主页面 1.自定义Cell的代码优化 * 在获得最新微博的时候计算Frame,然后再reloadData * 在tableView:heightForRowAtIndexPath:方法中返回StatusCellFrame算好的cell高度 * 在tableView:cellForRowAtIndexPath:方法中新建自定义cell,给Cell传递对应的StatusCellFrame对象 2.头像 * 封装一个IconView,存放用户头像图片和认证图标 * 提供接口让别人传递(User)用户和(IconType)头像类型数据 3.昵称 * 根据是不是会员来决定昵称的颜色、决定会员图标是否需要显示 4.时间 * 解析新浪返回的字符串为更合理的字符串 5.来源 * 截取来源中间的有用字符串 6.转发 * 背景图片 * 昵称加上@ 7.配图 * 以九宫格形式展示图片
10月4号
一、主页面 1.底部Dock 1> 封装一个Dock类 2> 添加内部的3个按钮和分隔线、设置背景图片、设置自动伸缩属性 3> 重写setFrame方法,目的是限制Dock的宽高 4> 在Cell中添加Dock,并且设置y值 5> 拿到微博数据,设置操作条按钮的数值 2.添加下拉刷新功能 3.添加上拉加载更多功能
10月5号
一、微博正文 1.新建正文控制器,在点击首页的某一条微博时跳转过去 2.在MainController中设置导航控制器的代理,监听所有导航控制器的跳转 1> 如果即将显示的不是根控制器 * 将导航控制器view的高度拉长为屏幕的高度(不包括状态栏高度) * 添加Dock到跟控制器(目的是在切换控制器时,Dock能随着根控制器一起移动。注意设置Dock的y值,当根控制器view是UIScrollView时,要加上contentOffset的y值。) * 给即将显示的控制器添加左上角的返回按钮 2> 如果显示完毕的是根控制器 * 将导航控制器view的高度还原为默认高度(屏幕高度 - Dock高度) * 将Dock添加到MainController的view上 3.Dock应该提供一个方法返回当前选中标签的索引 4.tableView处理步骤 #pragma mark 1.有多少组 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView * 返回2 #pragma mark 2.第section组头部控件有多高 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section * section == 0 返回0 * section == 1 返回标题栏的高度(44) #pragma mark 3.第section组有多少行 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section * section == 0 返回1 * section == 1 * 如果当前是转发,返回转发的数量 * 如果当前是评论,返回评论的数量 #pragma mark 4.indexPath这行的cell有多高 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath * section == 0 返回微博cell的高度 * section == 1 * 如果当前是转发,返回转发cell的高度 * 如果当前是评论,返回评论cell的高度 #pragma mark 5.indexPath这行的cell长什么样子 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath * section == 0 返回微博cell * section == 1 * 如果当前是转发,返回转发cell * 如果当前是评论,返回评论cell #pragma mark 6.第section组头部显示什么控件 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section * section == 0 返回nil * section == 1 返回标题栏控件 5.抽取Cell和Frame的公共父类 6.创建tableView第1组的头部控件 7.展示被转发的微博