小画家开发笔记
小画家开发笔记
GIT不光可以用于团队开发,而且适用于个人开发!
1. 新建绘制视图,用于整个的画图功能
1> 手指移动时,画图,需要记录手指移动的点
// 1. 取出手势
// 2. 取出点
// 3. 使用成员变量记录手指点
// 4. setNeedDisplay重绘视图
2> 由于每次都需要重新绘制,无法记录以前的点,因此采用一条路径记录所有点,在重新绘制时,绘制完整的路径
1) 定义一个路径属性
2) 手指按下时,实例化路径
3) 手指移动时,添加点到路径
4) 手指抬起时,将路径释放
5) drawRect时,直接绘制完整路径
3> 以前的路径没有被保留住
1) 使用一个数组记录住所有的绘制路径
2) 在每次手指抬起时,将路径添加至数组
3) 在重绘时,先绘制所有的路径,然后再绘制新的路径
4> 对绘制的线条进行美化
1> 经过测试,需要记录住绘制路径的颜色
2> 需要记录路径的线宽
3> 解决办法:自定义一个路径,包含有路径,颜色,线宽
/*
1> CGContextSetLineWidth 设置线宽
2> CGContextSetLineCap 设置线条顶点(起点,终点)的样式
3> CGContextSetLineJoin 设置连接点样式
4> CGContextSetLineDash 设置虚线样式
*/
CGContextSetLineWidth(context, 10.0f);
CGContextSetLineCap(context, kCGLineCapButt);
CGContextSetLineJoin(context, kCGLineJoinBevel);
/*
绘制虚线的参数
1. 上下文
2. 相位:虚线开始的位置,通常设置为0
3. 虚线段的长度数组
4. 虚线段数组的个数
*/
CGFloat lengths[] = {10.0, 20.0f};
CGContextSetLineDash(context, 0, lengths, 2);
5> iOS6 & iOS7的屏幕适配问题
iOS7的市场保有量 74%
有两种解决方法
1) 用Storyboard的自动布局系统:AutoLayout
2) 用代码
a) 写死坐标:针对不同的屏幕 :3.5&4 不同的系统
iOS6没有状态栏,iOS7有状态栏
b) 使用VLF,基于自动布局的一套格式化语言,不太推荐
6> 绘制工具视图
1) 使用循环遍历依次设置按钮的标题
2) 根据标题标签的位置计算出下方红线的位置
3) 通过动画移动红线
懒加载,在需要时在加载,这一特性,在OC应用程序中,无所不在。
函数的重载,函数名是一样的,但是参数类型不一样,在OC中是不支持的。
OC消息机制,在需要时,才将函数加载到内存里。
从性能讲,懒加载的模式不如C++,但是从内存占用上,有非常明显优势!
4)实例化颜色选择视图,并显示
7> 绘制颜色选择视图
1)使用循环建立按钮,根据颜色数组计算出平均按钮的宽度
2) 设置按钮的图像
提示:可以使用背景颜色
如果使用背景颜色设置按钮,需要计算以下内容:
(1) 左边的起始边距,上边距,下边距(可以使用宏定义,以便于调整)
(2) 在循环计算按钮位置时,会稍微复杂一些!
(3) 使用背景颜色最大的好处是:性能很高!
为什么在演练中使用图像?
(1) 今天的演练重点就是Quartz 2D的绘图,根据不同的上下文,同样的代码可以绘图
(2) 打开图像上下文,是在专门的区域绘图,完成后,关闭上下文,交回共享区域的使用权
(3) 使用绘图的方式有一个好处,就是只需要计算按钮的宽度,其他的位置属性,均不需要计算
如果做应用程序开发,要学会用代码计算行列,例如九宫格!表情排列!
关于数学的计算(平面几何,立体几何,数值分析(矩阵计算)),物理计算(运动物理学),搞游戏开发!
8> 代理(委托)模式,通常是用于上下级之间的消息传递
1) 定义协议(双方共同遵守)
2) 定义代理,由代理执行具体的操作
3) 委托方发生某个事件时,通知代理工作
4) 代理方(被委托方)具体实现
代理实现不实现,如果使用其他框架(团队开发时),需要判断代理是否实现了方法,如果都是自己写的,这一步可以省略。
9> 小结
涉及到手势、触摸事件
绘图
路径绘图,路径数组绘图,图像绘制
使用不同上下文时的绘图
自定义控件
通过代码的方式完成iOS6 & iOS7的适配
GIT的基本演练,使用GIT允许无数次的后悔,而SVN只能后悔一次!
GIT有本地的代码仓库,几遍不联网,也可以使用。
MVC结构