zoukankan      html  css  js  c++  java
  • 小画家开发笔记

    小画家开发笔记


    小画家开发笔记
    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结构

    © chenyilong. Powered by Postach.io


    作者:
    出处:http://www.cnblogs.com/ChenYilong/(点击RSS订阅)
    本文版权归作者和博客园共有,欢迎转载,
    但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    eclipse导出maven java project为jar包,包含第三方依赖jar包以及普通Java Project 导出包含第三方
    Joda-Time 工具类的使用
    spring-boot 分布式定时任务锁shedlock
    [DB][MyBatis]利用mybatis-paginator实现分页(目前看到MyBatis下最好的分页实现)
    KafKa脚本
    Es重建索引
    Canal1.1.4同步数据至Es时间格式问题
    CDH5.12.1添加Phoenix4.14
    CDH5.12.1利用Sqoop将mysql数据导入hive
    CDH5.12.1将Spark1.6升级到Spark2.2
  • 原文地址:https://www.cnblogs.com/ChenYilong/p/3556311.html
Copyright © 2011-2022 走看看