项目总结

Coffee项目总结

最近做了一个小项目,给一家公司做某咖啡的产品展示,纯UI不涉及到网络而且技术点也不是很多。但是不管怎样,这是我第一次自己负责整个项目的开发,第一次与客户接触,所以从中学到的东西也有很多。包括了一些技术上的知识,还有一些沟通方面的经验,更重要的是发现了自己的坏毛病-不够认真。

一.技术

对于目前的我来说,最最重要的是快速、扎实的提高个人技术。所以这篇文章的第一部分也会以项目当中用到的一些主要技术点为主题,来总结我在这个项目当中所学到的知识。

1.动画

这个项目的主要目的是用于展示产品,整体的设计并不复杂,展示起来却很简洁。其中用到了一些动画,因为动画效果并不十分复杂,所以我采用的方案是用UIView的类方法来定制动画,通过配置类方法的参数实现了项目当中所需要展示的一些动画效果。
这里需要总结的是:当通过修改view的某个约束的constants值来实现动画的时候,需要先修改这个值,然后在UIView的类方法当中调用layoutIfNeeded这个方法来更新期约束值。
UIView这些类方法能够满足大多数动画效果的需求,并且极其简单易用,在之后的项目当中,动画效果的实现我仍然会首选这样的方案。如果需要定制一些复杂动画,这些方法无法满足条件或者定制起来相对比较麻烦的情况下,CoreAnimation能够提供一些简单易用的API供我们使用,CoreAnimation会是我最近计划的一部分。

2.定制navigationbar

大多数APP当中,设计师为了满足整体的设计风格,会对NavigationBar进行一些显示上的改动,比如颜色、高度、返回键、点击效果(如抽屉效果)等等。当然,这些改动是相对于传统的苹果提供给我们的NavigationBar,实则这些改动几乎已经成为了一个美观好用的APP的标配。项目当中的导航栏如下图。
项目总结_第1张图片 项目总结_第2张图片

很多界面的导航栏效果与两张图相似,因此需要抽象出一个控制器基类能够避免写很多重复的代码,并且容易修改,这应该是最基本的编程思想吧。这里需要总结的一个地方是:

self.navigationController.navigationBar.translucent = NO;  

导航栏需要改颜色的时候,手写颜色之前必须把translucent这个Bool值设置为NO——将NavigationBar设为不透明,否则无论怎样设置bar的颜色都会有一种灰蒙蒙的感觉,也就是会有透明度的存在。但是需要注意的是View坐标的改变。translucent的默认值为YES,这种情况下View的size与屏幕的size是一样的。translucent的值为NO的时候,View的高度 = 屏幕的高度 -(导航栏 + 状态栏),view的Y坐标 = 导航栏高度+状态栏高度。这个是在写UI代码之前就要考虑好的,由于之前并不知道这个属性所造成的影响,官方文档提供的Reference里边也没有过多的描述,这个属性值所造成的影响真的是让我进了一次坑,一定要记住这个属性。

4.Touch

- (void)touchesBegan:(NSSet *)touches withEvent:(nullable UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(nullable UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(nullable UIEvent *)event;

这三个方法是用来响应View的点击、拖动、点击完成的。通过这三个方法实现了一个用于导航的view的显示以及隐藏。这里并没有遇到很多的困难,大多数是API的调用,以及一些计算。

5.集成第三方代码

这个项目当中用了三个第三方的开源代码。
Masonry 一个用于简化手写autolayout代码的开源库。
WMPlayer 用于播放视频。
iCarousel 动画展示CoverFlow。
kModel
WMPalyer,是客户后来临时提需求加进来的。 客户需要点击视频右下角的按钮,能够横屏全屏展示。效果如下:
项目总结_第3张图片 项目总结_第4张图片

而之前是竖屏那样显示,利用系统的MPMoviePlayerController自己手写实现的,然而苹果并没有提供点击右下角按钮来进行横屏显示的API。因此引入了WMPlayer这个开源代码库。引入这个库的原因是能够快速的满足客户的需求,毕竟这个项目做了也已经有一段时间,而且不用自己耗时间去造轮子。 之后为了弥补自己在视频播放显示效果的定制方面的不足,我也打算自己写一个这样代码库,尽我所能的实现一些例如爱奇艺那样的展示功能。

6.适配(autolayout)

这个项目的适配舍弃了4s这样的小屏幕设备,因为开发这个项目的时候6p也已经在国内卖了有了一段时间,4s固然是经典,但是毕竟是过去式,而且考虑到这个项目所要展示给的那些用户,所以就没有适配4s这样的小屏幕设备。
整个项目当中的适配都用autolayout来做,包括动画效果。需要注意的是CHCR这几个新认识的朋友,它们的优先级改变能够在某些时候起到大作用。尤其在同一行有两个靠内容决定size的控件的时候,非常有用。
还有就是通过xib来添加scroll的时候,scroll的约束添加与他的滚动方向有关系。

7.关于tableview

UITableView不用说,重中之重。用了那么多的tableView每次用还是会出现问题。这里通过我遇到的两个坑来总结这个项目中UITableView的使用。
坑1:UITableVIewCell高度的自适应。
cell自适应高度有三种情况:
a.若事先知道cell的高度可以将cell的高度写死,这也是最简单的,没啥好说的。
b.通过Xib创建的Cell,cell内容复杂。
项目总结_第5张图片
为了在各种屏幕上都能显示正常的高度,cell必须自适应高度。简单的cell可以通过autolayout以及tableview的estimatedRowHeight,和RowHeight来自适应高度,但是复杂的cell很难做到,一个不小心就会出现各种意外。因此我才用的方式是将xib当中最后一行的cell作为计算cell高度的控件,在cell的类当中需要一个outlet的指针指向这个控件,并且实现一个计算高度的方法,让cell自己进行高度计算。
c.同一套UI,数据量不一样。
项目总结_第6张图片 项目总结_第7张图片

通过计算数据(文字)的size来进行自适应。

9.数据获取

通过json工具制作json数据,并且作为本地文件用来读取,通过model转化,最终显示在View上。这里也是采用了开源库kModel来制作数据model,简单易用。

技术部分的总结到此为止,可能有很多的技术细节并没有过多去写,但是不要忘记这个项目当中对未来的项目来说,会有很多值得回顾的地方。一定要注重细节

沟通

不得不说,整个项目做下来之后,受益匪浅,尤其是在与人沟通这方面。这个项目是我的一个很好的同事介绍给我的,他负责一个中间的角色,在开发者(我)与客户之间做一个协调沟通的角色。然而,有些时候沟通起来似乎并没有那么顺利。
通过这个项目,关于沟通做了几点总结:
1.与客户的每一次文档交互(修改时间,内容。。)都要有明确记录。 避免两边各持一词。
2.当产品出现设计上的问题的时候,要尽早与设计人员沟通。
3..对待客户的每一次反馈都要认真的对待,做项目一定要严谨。

个人缺点

好了,自我反思的时间到了。呵呵,真是不愿意提啊,自己都想抽自己。做这个项目期间,暴露出来最重要的一个缺点就是,不认真,不认真,不认真。最尼玛可怕的是我自己早就已经习惯了这种,不注重细节,不关注小事的臭毛病,根本感觉不出来自己在犯错,直到客户那边多次反应这个问题,我才恍然大悟。
我总是一件事情来了,我首先关注的是解决这件事大体的思路,一旦大体的思路有了,就马上着手去干,根本不怎么考虑细节,去观察每一个可能会出现问题的地方,总觉得遇到问题再说吧。这样就导致做出了很多的临时方案,而不是之前就预见到,而做好的解决方案,从而导致代码写的也不是那么漂亮。也可能是因为项目经验本身不多,也没办法考虑过多的细节,但是可以肯定的是,对于细节的把握,我做的远远不够。

这篇总结就写到这里,为这个项目的结束画上一个不是很完美的句号。
2015年早已过去,2016年已经开始。希望今年能够取得一个长足的进步,并且不断的积累,积累,积累。
一颗不安躁动的心,一个终将发光的人。

你可能感兴趣的:(一周总结)