简笔画项目总结: ios绘图机制 & 实现记录笔迹功能

简介:

简笔画的项目是从暑期8月份开始的,差不多9月多的时候已经有出版,修修改改拖到现在才算能结项目. 现在来总结有点晚了,一些体会早忘记了,但我还是尽力回忆一些自己认为有用的东西记录一下。 

1、故事板。我在上个项目项目总结:华南师范大学校园开发教育android客户端总结 中谈到了故事板,就是项目的设计图。因为这次的项目系统较为复杂,逻辑连贯性不强,这就考验设计故事板的人的写故事板的能力。其实故事板就是你要完全理解整个应用依赖的东西,所以故事板写得清晰合理的话,项目也会进行得较为顺利。这次的故事板有很多细节没有交代清楚,好多东西都需要后来的讨论才最终确定下来,这虽说是无可避免的但是能减少就减少吧。

2、ios绘图机制:因为简笔画项目主要就是一个绘图软件,所以总结一些ios的绘图是必须的。   

https://developer.apple.com/library/ios/#documentation/2DDrawing/Conceptual/DrawingPrintingiOS/GraphicsDrawingOverview/GraphicsDrawingOverview.html#//apple_ref/doc/uid/TP40010156-CH14-SW1

可参考上面的官方文档。

ios提供了2种绘图方案:

1,采用iOS的核心图形库:Quartz, Core Animation, and UIKit

2,采用OpenGL ES。

这次项目是用第一种,OpenGL更多的是应用于游戏场景中。

Quartz类库是画画的主要类库,提供了基于路径画图、反锯齿渲染、渐变填充、图像、色彩、坐标空间转换和PDF文档的一些操作。

UIKit提供划线、Quartz images和颜色操作的objective-C 封装。

Core Animation:提供了UIKit的的底层支持,也可以用来实现自定义动画。

 

The UIKit Graphics System

1、画图主要在drawRect:中进行,但你不能主动去调用它,它只能被系统本身调用,我们只能通过setNeedsDisplay or setNeedsDisplayInRect: 通知系统更新绘图,系统之后会自行去调用drawRect。

2、Graphics Contexts:Conceptually, a graphics context is an object that describes where and how drawing should occur, including basic drawing attributes such as the colors to use when drawing, the clipping area, line width and style information, font information, compositing options, and so on。从定义可以看出,Graphics Contexts可以理解成一个画板,画板上可以定义一些基本的画图元素。每个UIVIew都会创建。

3、坐标。

上图是用户坐标、视图坐标、硬件坐标的关系。但我们更关心的是ios接口给我们的坐标系统:2种坐标系统

upper-left-origin coordinate system (ULO)  and  lower-left-origin coordinate system (LLO)

关于坐标变换的可以参考iphone:坐标变换 。

4、画图。

说了这么多,究竟在ios上如何实现画图呢?

 

复制代码
-(void)drawRect:(CGRect)rect{
         CGContextRef ref=UIGraphicsGetCurrentContext();//拿到当前被准备好的画板。在这个画板上画就是在当前视图上画
         CGContextBeginPath(ref);//这里提到一个很重要的概念叫路径(path),其实就是告诉画板环境,我们要开始画了,你记下。
         CGContextMoveToPoint(ref, 0, 0);//画线需要我解释吗?不用了吧?就是两点确定一条直线了。
         CGContextAddLineToPoint(ref, 300,300);
         CGFloat redColor[4]={1.0,0,0,1.0};
         CGContextSetStrokeColor(ref, redColor);//设置了一下当前那个画笔的颜色。
         CGContextStrokePath(ref);//告诉画板,对我移动的路径用画笔画一下。
}
复制代码

 

什么简单的画了一条线,其实画画的过程都差不多,有几个步骤:

1,拿到当前面板  UIGraphicsGetCurrentContext

2,开始画声明

3,画

4,提交画

主要在对Graphics Contexts做的那些修改上面:

 

具体内容自行查文档,这里不赘述。

5、View截图

复制代码
-(UIImage *)getImage
{
    UIGraphicsBeginImageContext(self.bounds.size);
    [self.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *Img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return Img;
}
复制代码

 

 记录笔迹:

具体看我的另一篇blog:iphone:实现像DrawSomething类似的自动画图的动画效果

 

 

 

more :http://iosdeveloper.diandian.com/post/2011-12-29/16946271

 

本文转自老Zhan博客园博客,原文链接:http://www.cnblogs.com/mybkn/archive/2012/11/15/2772120.html,如需转载请自行联系原作者

相关文章
|
4月前
|
存储 数据建模 iOS开发
iOS设备功能和框架: 什么是 Core Data,它在 iOS 中的作用是什么?
iOS设备功能和框架: 什么是 Core Data,它在 iOS 中的作用是什么?
34 1
|
4月前
|
定位技术 iOS开发
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
20 0
|
8月前
|
移动开发 安全 前端开发
提升iOS应用安全性:全面代码混淆功能介绍,使用Ipa Guard保护你的应用
iOS加固保护是直接针对ios ipa二进制文件的保护技术,可以对iOS APP中的可执行文件进行深度混淆、加密。使用任何工具都无法逆向、破解还原源文件。对APP进行完整性保护,防止应用程序中的代码及资源文件被恶意篡改。Ipa Guard通过修改 ipa 文件中的 macho 文件中二进制数据(代码模块配置)进行操作,无需源码。不限定开发技术平台。支持oc,swift,cocos2d-x、unity3d、quick-cocos,html5 ,react native等等各种开发技术。Ipa Guard主要包含代码混淆全面、资源文件处理、不需要源代码更安全、调试信息清理、即时测试运行。
|
9月前
|
监控 Android开发 iOS开发
盘点一对一直播源码iOS系统维持平台稳定功能(一):弹性扩缩容
参考代码:弹性扩缩容如何实现?System.out.println("扩容:增加直播平台实例"); currentCapacity++; } private void scaleDown() { System.out.println("缩容:减少直播平台实例");
盘点一对一直播源码iOS系统维持平台稳定功能(一):弹性扩缩容
|
4月前
|
机器学习/深度学习 PyTorch TensorFlow
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
34 0
|
4月前
|
iOS开发
iOS设备功能和框架: 如何使用 Core Animation 创建动画效果?
iOS设备功能和框架: 如何使用 Core Animation 创建动画效果?
101 0
|
4月前
|
iOS开发
iOS App Store 上传项目报错 缺少隐私政策网址 (URL) 解决方法
iOS App Store 上传项目报错 缺少隐私政策网址 (URL) 解决方法
iOS App Store 上传项目报错 缺少隐私政策网址 (URL) 解决方法
|
9月前
|
存储 视频直播 iOS开发
山东布谷科技iOS端实现直播app源码秒开技术(二):缓冲功能
缓冲功能对直播app源码平台用户有着提升观看短视频、直播体验的作用;对直播app源码平台有着提升直播质量,增加观众黏性的好处。因此,直播平台应当重视并充分发挥缓冲功能的潜力,为用户继续打造更好的直播观看体验。
山东布谷科技iOS端实现直播app源码秒开技术(二):缓冲功能
|
10月前
|
JavaScript Android开发 iOS开发
layui框架实战案例(6):上传图片和视频自动调用IOS或安卓系统的摄像头功能
layui框架实战案例(6):上传图片和视频自动调用IOS或安卓系统的摄像头功能
239 0
|
10月前
|
缓存 移动开发 前端开发
iOS项目组件化历程
随着业务的发展,App中的页面,网络请求,通用弹层UI,通用TableCell数量就会剧增,需求的开发人员数量也会逐渐增多。 如果所有业务都在同一个App中,并且同时开发人数较少时,抛开代码健壮性不谈,实际的开发体验可能并没有那么糟糕,毕竟作为一个开发,什么地方用什么控件,就跟在HashMap中通过Key获取Value那么简单。 那么当业务成长到需要分化到多个App的时候,组件化的重要性开始体现了。
59 0