绘制对象iPhone开发基础教程 笔记
每日一贴,今天的内容关键字为绘制对象
大家都知道,MacOS是一个非常重视UI的系统。所以在MacOS编程里绘制是一个非常重要的部分。第10部分,我会从2点介绍MacOS下绘制编程。首先是绘制技术分类;其次是绘制代码结构。
从绘制技术分类上看,Cocoa程序员能接触的几种绘制技术列表如下:
1. Cocoa Drawing(NS-prefix)
2. Core Graphics(CG-prefix, called Quazrtz 2D)
3. Core Animation
4. Core Image
5. OpenGL
在这里我不打算给大家介绍每一种都是如何绘制详细的图像。只是介绍一下,它们大概长什么样子,并且有什么优势和制约。
###Cocoa Drawing
Cocoa Drawing应该是学习Cocoa程序开发最早接触的绘制技术。也是目前大多数MacOS程序所应用的绘制技术,其底层应用Quazrtz 2D(Core Graphics)。苹果对应文档为 [Cocoa Drawing Guide](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaDrawingGuide/Introduction/Introduction.html)。Cocoa Drawing并没有统一的绘制函数,全部绘制函数疏散在几个主要的NS类的上面。例如, NSImage, NSBezierPath, NSString, NSAttributedString, NSColor, NSShadow,NSGradient …
所以很简略,当你看到如下代码便可以判断,应用的是Cocoa Drawing方法
复制代码
|
这类代码多出现在NSView的drawRect函数内。Cocoa Drawing 的渲染上下文是 NSGraphicsContext,我一直的看到很多新手把 NSGraphicsContext 和 CoreGraphics 的 CGContextRef 搞混。虽然它们很像并且也确实是有关系的,不过如果你不了解当绘制时候的 render context 很多时候将掉掉一个空白页面的结果。
###Core Graphics
Core Graphics 是 Cocoa Drawing layer 的底层技术,在 iOS 开发中非常普遍,因为 iOS 系统中其实不存在 Cocoa layer 所以网上可以找到的多是 Core Graphics 绘制代码段子,这给那些不了解 Mac 开发的新手来说造成了很大困扰。Cocoa 是 Mac OS 下的 application framework 而 iOS 下的 application framework 则是 UIKit.framework又叫 Cocoa Touch,它们分享部分代码基础但又不完全一样。例如,Cocoa Touch 下的 UIView 的渲染上下文会应用 UIGraphicsGetCurrentContext() 取得,它掉掉的是一个 CGContextRef 指针,而在 NSView 里多用 [NSGraphicsContext currentContext] 取得渲染上下文。它掉掉的是一个 NSGraphicsContext 对象。当然 NSView 里也可以通过 CGContextRef ctx = [[NSGraphicsContext currentContext] graphicsPort]; 来取得一个 Core Graphics 渲染上下文。 可见 Mac OS 下的开发更为灵活一些。因为 iOS 中的 UIKit 开发初期就瞄准了显卡硬件加速,全部 UIView 都是默许 layer-backed 的。iOS 开发者必须应用 Core Graphics 和 Core Animation 这几个绝对底层的绘制技术。
请看上面等价代码,作用是绘制一个白色矩形。但是分别应用 Core Graphics 和 Cocoa Drawing:
复制代码
|
可以看出,这是2种*风格完全不同*的绘制技术。Cocoa Drawing 是疏散式的绘制函数,而 Core Graphics 是传统的类似 OpenGL 的集成式的绘制方法。其实 Cocoa Drawing 上层是 Core Graphics, Core Graphics 的上层是 OpenGL。
###Core Animation
如果说 Core Graphics 和 Cocoa Drawing 是通用的 UI 绘制框架的话,那么 CA 显然是界面动画绘制的高级技术。
Core Animation 的对应 Cocoa Animation 部分应该是 NSAnimation 和 NSViewAnimation,但这2个差距比较大。NSAnimation 出现与 OS X 10.4,Core Animation 是 10.5 后出现的。NSViewAnimation 功能和应用绝对简略。
简略来说,Core Animation 的作用对象是 CALayer, NSAnimation 的作用对象是 NSView。
毅力,是千里大堤一沙一石的凝聚,一点点地累积,才有前不见头后不见尾的壮丽;毅力,是春蚕吐丝一缕一缕的环绕,一丝丝地坚持,才有破茧而出重见光明的辉煌; 毅力,是远航的船的帆,有了帆,船才可以到达成功的彼岸。
iPhone只跟踪应用一个手指时的轻击,记住这一点非常重要。如果她检测到多个触摸,则会将轻击计数重置为1.
文章结束给大家分享下程序员的一些笑话语录: 程序员打油诗
写字楼里写字间,写字间里程序员;
程序人员写程序,又拿程序换酒钱。
酒醒只在网上坐,酒醉还来网下眠;
酒醉酒醒日复日,网上网下年复年。
但愿老死电脑间,不愿鞠躬老板前;
奔驰宝马贵者趣,公交自行程序员。
别人笑我忒疯癫,我笑自己命太贱;
不见满街漂亮妹,哪个归得程序员。
绘制对象iPhone开发基础教程 笔记相关推荐
- iPhone开发基础教程笔记(二)--第三章 处理基本交互
第三章 处理基本交互 本章将编写一个稍微复杂的应用程序,他有两个按钮和一个标签.当用户按下任一按钮时,标签的文本将随之变化 3.1 模型-视图-控制器泛型 首先,让我们了解一些基本概念.Cocoa T ...
- iPhone开发基础教程笔记(十二)--第十二章 使用Quartz和OpenGL绘图
第十二章 使用Quartz和OpenGL绘图 有时应用程序需要能够自定义绘图.一个库是Quartz 2D,她是Core Graphics框架的一部分:另一个库是OpenGL ES,她是跨平台的图形库. ...
- iPhone 开发基础教程
Phone 开发基础教程之 在开始编写iPhone软件之前,需要做一些准备工作.对于初学者,需要一台运行Leopard(OS X 10.5.3或更高版本)的基于Intel的Macintosh计算机.2 ...
- Iphone开发基础教程 (7章 标签栏与选取器)--读书笔记
- 《iPhone开发基础教程》第13章 我在哪里?使用Core Location定位功能
Core Location可以利用三种技术实现定位:GPS.蜂窝基站三角网定位(cell tower triangulation)和Wi-Fi定位服务(WPS). GPS是最精确的,但在第一代iPho ...
- phone开发基础教程
Iphone开发基础教程>第九章 导航控制器和表视图(2009-08-11 12:06:17) 这一章比较庞大,里面的例子也比较多,我看书和实践一共花了我一周的时间,然后自己又摸索构建一个Vie ...
- iPhone 4与iPad开发基础教程
iPhone 4与iPad开发基础教程 创造销售奇迹的经典著作 针对iOS SDK新特性全面改版 从这里,拥抱软件开发的未来 基本信息 原书名:Beginning iPhone 4 Developme ...
- Xamarin图表开发基础教程(7)OxyPlot框架
Xamarin图表开发基础教程(7)OxyPlot框架 Xamarin.Forms中使用OxyPlot框架 在Xamarin. Forms平台上实现图表显示需要完成以下的步骤: 1.添加OxyPlot ...
- Xamarin图表开发基础教程(5)OxyPlot框架
Xamarin图表开发基础教程(5)OxyPlot框架 Xamarin.iOS中使用OxyPlot框架 在Xamarin.iOS平台上实现图表显示需要完成以下的步骤: 1.添加OxyPlot.Xama ...
最新文章
- encoding/json 方法Marshal的说明
- javaweb 图书管理系统完整代码_Java Web安全代码审计(一)
- 最长公共子序列lcs 51nod1006
- C#枚举中使用Flags特性
- 觉得清楚,跟说清楚写清楚,两回事
- 并行化:你的高并发大杀器
- Matlab:实现菲涅尔圆孔衍射仿真
- 炫酷的2022网页特效网站源码
- SQL Server 按间隔时间查询记录
- 基于51单片机的电子密码锁设计
- speedoffice(Word)怎么修改纸张方向
- Supervised Fitting of Geometric Primitives to 3D Point Clouds阅读笔记
- php利用微博做图床最新2019,利用微博当图床-php语言实现
- 目前最值得收藏的100个各类资源站
- 坦克世界闪击战服务器维护,坦克世界闪击战登录不上怎么办 登录不上解决方案...
- Springboot 项目整合自定义日志文件
- linux配置git
- SUST 20/3/27 题解
- (CNS复现)CLAM——Chapter_02
- 1g的树莓派4b能做什么_树莓派4B(Raspbian)切换64位内核+简单性能测试