• 新浪微博-开发过程


    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封装getpost请求
    
    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.展示被转发的微博
  • 相关阅读:
    拓端tecdat|R语言ARIMA、ARIMAX、 动态回归和OLS 回归预测多元时间序列
    拓端tecdat|python贝叶斯随机过程:马尔可夫链MarkovChain,MC和MetropolisHastings,MH采样算法可视化
    拓端tecdat|R语言Kmeans和层次聚类分析癌细胞系微阵列数据和树状图可视化比较
    拓端tecdat|R语言用有限混合模型(FMM,finite mixture model)创建衰退指标对股市SPY、ETF收益聚类和双坐标图可视化
    php/nginx/axios: 文件上传: 配置最长执行时间等相关项 (php8.1.1 / nginx 1.18.0 / vue@3.2.26 )
    thinkphp6: 生成zip压缩包并下载(php 8.1.1 / thinkphp v6.0.10LTS )
    thinkphp6: 给接口api做签名验证(php 8.1.1 / thinkphp v6.0.10LTS )
    thinkphp6: 用imagemagick库生成缩略图(ImageMagick 6.9.1160 / php 8.1.1 / thinkphp v6.0.10LTS )
    thinkphp6: 用phpspreadsheet导出数据到excel (php 8.1.1 / thinkphp v6.0.10LTS / phpspreadsheet 1.21.0 )
    vue.js3: 从详情页返回列表页,显示跳转前列表而不是第一页(vue@3.2.26)
  • 原文地址:https://www.cnblogs.com/needly/p/3401264.html
Copyright © 2020-2023  润新知