1、日期判断
1> 将判断某个时间是否是今年、昨天、今天抽取到NSDate分类中,注意比较思路
2> 在created_at的getter方法中判断如下:
注:关于随着现实时间推移,cell中显示时间的改变问题,已经自动解决,因为是重写created_at的getter方法,每次滚动后,再次显示cell会重新get时间,进行判断后显示,但若是重写了created_at的setter方法则不会自动更新!!!
3> 设置日期颜色
2、来源
注:来源和时间不同,来源不需要刷新时间改变,只需要设置一次就够了,因此可以重写setter方法,截取所需字符串!!!
3、日期刷新后frame重新设置
注:关于cell中每个控件frame的计算只会计算一次,即在加载到最新微博的时候,进行字典转模型(新浪返回JSON,AFN转字典数组,再手动转HWStatus,再转HWStatusFrame模型)计算一次,下次直接将HWStatusFrame设置给cell,cell设置每个控件尺寸,但是由于时间会变化,因此显示时间的UILabel也需要重新设置,否则可能出现显示不全!!!
修改:在cell的setStatusFrame:方法中重新设置时间、来源(尺寸受时间影响)
注:关于字符串分类(计算文字尺寸)抽取,不要用类方法,直接用对象方法!
4、配图相册
4.1 自定义配图相册类
注:由于配图是作为一个整体,即可以存在原创微博中、又可以存在转发微博中,而且里面还可以存放不同数量的图片,以及图片的点击操作等,因此最好将其抽取出来
1> 自定义HWStatusPhotosView,继承自UIView
2>里面涉及的逻辑比较多,可能存在不同数量图片,因此先写外面,cell修改如下:
3> 计算frame中修改如下:
关键:photosSizeWithCount:方法
4.2 计算photosView尺寸
4.3 HWStatusPhotosView内部排列
1> HWStatusPhotosView添加@property(nonatomic, strong) NSArray *photos;
2>在cell的setStatusFrame:方法中传入配图数组(原创微博和转发微博)
3> 在setPhoto:方法中设置控件
注:cell的循环引用问题!!!
4> 在layoutSubviews:计算尺寸
注1:应将计算相册尺寸photosSizeWithCount:封装到HWStatusPhotosView方法中(类方法),外界使用的时候只需要传入图片个数,返回一个相册尺寸!!!
注2:对于4张图片,应该显示2x2相册
定义宏#defineHWStatusPhotoMaxCol(count) ((count==4)?2:3)
4.4 显示GIF标记
由于每一个图片可能都会有一个GIF标记,因此最好将每一个图片(包括GIF标记)再抽取出一个整体,封装成HWStatusPhotoView,再传入HWPhoto模型,
配图相册整体思路:一个HWPhoto模型对应一个HWStatusPhotoView,多个HWStatusPhotoView组成HWStatusPhotosView!!!
1>HWStatusPhotoView
2> HWStatusPhotosView
5、UIImageView的contentMode
6、头像
有认证的用户(企业、个人、微博达人等)会在头像右下角显示一个认证图片,而且头像在其他地方也会使用,比如个人中心,因此最好抽取出一个控件(放在Main/View中)
1>用户添加认证类型
2>HWIconView添加HWUser属性,重写setter方法
3> 在cell的setStatusFrame:方法中作相应修改
7、block的细节和本质
注:在微博项目中程序进入后台的代理方法中修改: