【补充说明:部分细节有待验证】

iPhone自带的库:
quartz
core animation
UIKit

1. UIKit
所有对图形的调用都封装在UIView的实例中;

1.1 画图:
UIView drawRect
第一次画图时,将全图绘制,以后根据实际情况绘制。
有以下行为会触发view更新:
(1)其他的view掩盖当前view;
(2)将隐藏view显示;
(3)scrollling view,然后再返回
(4)显式调用setNeedsDisplay、setNeedsDisplayInRect:

如果要更改显示内容,必须使用方法(4)触发更新。

1.2 坐标系和坐标变换:
当前坐标系(CTM):定义在CGContext中
创建CGAffineTransform结构做坐标变换。

1.3 图形上下文:
画图前,view会自动的配置环境,创建图形上下文(CGContextRef)
包括信息:图像,区域,线的宽度,字体等等

可以创建自己的上下文(CGBitmapContextCreate  CGPDFContextCreate)
【使用自己的上下文时,坐标原点在左下角,而不是标准的左上角】

参考:Quartz 2D Programming Guide
Q:CGContext Reference是个什么东西?

1.3 points VS. pixels
Quartz绘图使用基于向量的绘图模型。
Quartz使用的绘图空间user coordinate space被系统映射到实际的像素点。
精确性考虑,绘图坐标使用浮点数,而不是整数。

device coordinate space:通过像素来表达。
通常情况下,一个point映射到一个pixels

1.4 Color and Color Spaces
推荐使用RGB Color

(UIColor, )
CGContextSetRGBStrokeColor
CGContextSetRGBFillColor

1.5 图像类型
推荐使用:PNG
支持的图像类型:png, tif, jpg, gif, bmp, ico, cur, xbm

2. Drawing Tips

2.1 何时使用自定义绘图
显示内容需要动态改变时使用,否则不推荐使用自定义绘图。

可以使用UIIMageView显示
(UILable)

2.2 Improving Drawing Performance
(1)Draw minimally
(2)Mark opaque views as such:设置view的opaque属性为yes
(3)Remove alpha channels from PNG files:
(4)Reuse table cells and views during scrolling
翻页时应当避免创建新的view,会影响展示。
(5)Avoid clearing the previous content during scrolling
默认:UIKit会清空一个view当前的上下文buffer,然后再调用view的drawRect:
对于翻页,应当设置view的clearsContextBeforeDrawing为NO
(6)Minimize graphics state changes while drawing

2.3 Maintaining Image Quality
建议使用PNG图像格式;
使用大小合适的图片而不是scale,如果需要展现一个图片的不同大小,建议对一个图片搞多个版本;

3 Drawing with Quartz and UIKit
Quartz:iPhone绘图功能的总称。
Core Graphics framework是quartz的核心部分和主要接口。
内容:
Graphics context
Paths
Images and bitmaps
Transparency layer
Colors, pattern colors, and color spaces
Gradients and shadings
fonts
PDF Content

UIKit的图形类:
(1)UIImage
(2)UIColor
(3)UIFont
(4)UIScreen:screen的基本信息

可参考:
Core Graphics framework reference

3.1 配置图形上下文
UIGraphicsGetCurrentContext:得到Graphics context()的引用
通过调用Core Graphics的函数,可以修改当前的图形状态(Graphics state)。

(1)当前转换矩阵(CTM,current transformation matrix)
CGContextRotateCTM
CGContextScaleCTM
CGContextTranslateCTM
CGContextConcatCTM
(2)剪贴区
CGContextClipToRect
(3)线
CGContextSetLineWidth
CGContextSetLineJoin
CGContextSetLineCap
CGContextSetLineDash
CGContextSetMiterLimit

(4)平滑性
CGContextSetFlatness
(5)抗锯齿设置
CGContextSetAllowsAntialiasing
(6)颜色
CGContextSetRGBFillColor
CGContextSetRGBStrokeColor
【在UIKit的层次,对颜色的操作,也可以通过UIColor来实现】
(7)透明(Alpha值)
CGContextSetAlpha
(8)色彩对应方式(Rendering intent)
CGContextSetRenderingIntent
(9)色彩空间(Color space)
CGContextSetFillColorSpace
CGContextSetStrokeColorSpace
(10)文本(字体,大小,etc)
CGContextSetFont
CGContextSetFontSize
CGContextSetCharacterSpacing
【在UIKit层次,用UIFount类也可以实现】
(11)混合模式(blend mode)
CGContextSetBlendMode
【UIImage也可以指定blend mode】

Graphic context包括了graphics状态的一个队列。
context创建时为空,调用CGContextSaveGState将当前的state推入队列。
完成自定义绘图后,可以通过CGContextRestoreGState恢复保存的state。

3.2 创建和绘制Image
iPhone可以通过UIKit或者Core Graphics 的frameworks载入和展现image。
建议使用UIKit类对图像进行操作。
(1)在view中作为内容展现  -- image是view
使用UIIMageView
(2)在view中作为装饰展现  -- image是view的一部分
使用UIImage
(3)将位图数据保存到image
UIKit的方式:
- 使用UIFraphicBeginImageContext创建一个image based图形上下文;
- 画图;
- 调用UIGraphicsGetImageFromCurrentImageContext来产生一个image;
- 调用UIGraphicsEndImageContext关闭图形上下文。

Core Graphics的方式:
- 使用CGBitmapContextCreate创建一个bitmap图形的上下文
- 画图;
- 使用CGBitmapContextCreateImage创建一个CGImageRef(?)
(4)image保存问jpeg/png
- 创建一个UIImage对象;
- 调用UIImageRepreseating/UIImagePNGRepresentation获取一个NSData的对象;
- 保存NSData到相应的文件格式;

绘图:
[view drawRect]
     [Image drawAtPoint:]

Tips: Quartz图像左边起始是在左下角,向右,向上是正方向。

3.3 创建和绘制Path
path:使用线和贝塞尔曲线描述的图形

UIKit对path的操作:
UIRectFrame
UIRectFill

Core Graphics对path的操作:<>

创建path:
- CGContextBeginPath配置图形上下文
- 画图
  - CGContextStrokePath:创建一个line
  - CGContextFillPath
- 创建CGPathRef/CGMutablePathRef来保存对path的引用

3.4 模式、渐变、阴影 (Patterns,Gradients and Shadings)
Core Graphic提供的功能,可以创建渐变色填充path

Pattern:repeating images or content
Gradients/Shading:提供颜色的渐变功能

4. Drawing with OpenGL ES
用于绘制高帧率图像,绘图在硬件完成,所以OpenGL绘图通常非常快。

iPhone支持:OpenGLES.framework

可参考:OpenGL ES Programming Guide for iPhone OS

5. Core Animation Effects
Core Animation: Object C的framework,用于创建流,实时动画。
本身不具备创建画图能力。

基本动画:【可参看page71,Animating views】

【可参看Core Animation Programming Guide】

5.1 Layer
Core Animation的核心技术。
Layer是类似于view的轻量级对象,但其实际上是model对象,封装了图形,时间和可视属性等内容。

三种方式处理Layer的展示:
(1)将一个CGImageRef赋值给layer对象的contents
(2)将一个delegate赋给一个layer对象并处理绘图
(3)继承CALayer并重载其展现方式;

对layer的操作实质上时对model层次数据的操作。

【??】

5.2 Animations
CAAnimation类

多个动画组合成一个transactiong。
CATransaction类

【自定义动画:可参考:Animation types and timing programming guide】

转载于:https://www.cnblogs.com/zsw-1993/archive/2013/01/08/4880537.html

iPhone Application Programming Guide, Ch4相关推荐

  1. AVFoundation Programming Guide(官方文档翻译)完整版中英对照

    新博客: 完整版 - AVFoundation Programming Guide 分章节版: – 第1章:About AVFoundation - AVFoundation概述 – 第2章:Usin ...

  2. AVFoundation Programming Guide(官方文档翻译5)Still and Video Media Capture - 静态视频媒体捕获。

    新博客文章地址: 完整版 - AVFoundation Programming Guide 分章节版: – 第1章:About AVFoundation - AVFoundation概述 – 第2章: ...

  3. Structured Streaming编程 Programming Guide

    Structured Streaming编程 Programming Guide • Overview • Quick Example • Programming Model o Basic Conc ...

  4. 音频(3):iPod Library Access Programming Guide:Introduction

    Next Introduction 介绍 iPod库访问(iPod Library Access)让应用程序可以播放用户的歌曲.有声书.和播客.这个API设计使得基本播放变得非常简单,同时也支持高级的 ...

  5. [泰然翻译] cocos2d programming guide 场景和菜单

    原文地址:http://www.cocos2d-iphone.org/wi ... 3._menus_and_scenes cocos2d programming guide系列由sile(泰然翻译组 ...

  6. [iOS]Advanced Memory Management Programming Guide 高级内存管理编程指南(官方文档翻译)

    Advanced Memory Management Programming Guide - 高级内存管理编程指南(官方文档翻译) 版权声明:本文为博主原创翻译,如需转载请注明出处. 新博客文章地址: ...

  7. CUDA C++ Programming Guide( v11.2.0)部分翻译+笔记

    笔记对有些较为简单的部分做了省略,有些原文中表达比较拗口的地方,重新组织了话叙,由于部分内容并不是完全翻译,所以不建议作为主要学习资料,建议作为学习对比参考使用,如有不明白的地方或觉得有问题的地方,欢 ...

  8. iOS VoiceOver Programming Guide

    前言 VoiceOver是苹果"读屏"技术的名称,属于辅助功能的一部分.VoiceOver可以读出屏幕上的信息,以帮助盲人进行人机交互. 这项技术在苹果的各个系统中都可以看到,OS ...

  9. AVFoundation Programming Guide(官方文档翻译2)Using Assets - 使用Assets

    新博客: 完整版 - AVFoundation Programming Guide 分章节版: – 第1章:About AVFoundation - AVFoundation概述 – 第2章:Usin ...

  10. 再读苹果《Threading Programming Guide》笔记(二):线程配置与Run Loop

    本文为再读苹果<Threading Programming Guide>笔记第二篇,作者付宇轩表示:如今关于iOS多线程的文章层出不穷,但我觉得若想更好的领会各个实践者的文章,应该先仔细读 ...

最新文章

  1. Putty 工具 保存配置的 小技巧
  2. Redis介绍使用及进阶
  3. WhatsApp CEO向FreeBSD捐赠一百万美金
  4. 通过×××路由器实现跨网段访问
  5. Vue3究竟好在哪里 等推荐
  6. 牛客网 【每日一题】8月5日题目精讲—蓝魔法师
  7. 纽约首次尝试在大桥上识别车内司机面孔 失败得很彻底
  8. python语音分割_Python 牺牲性能以提升程序员的工作效率
  9. 将报表模板中数据集的数据源名称与服务器中的数据源名称修改一致.,连接数据库,服务器端的几个常见错误...
  10. Linux expect脚本使用详细说明及示例
  11. repo/git提交代码
  12. 对比学习(Contrastive Learning)在CV与NLP领域中的研究进展
  13. ado控件连接mysql_VB利用ADO控件连接access数据库
  14. 批量抓取QQ群成员的QQ号、昵称、群名片
  15. 微信小程序 自定义标题栏
  16. Sublime Text 4 首个稳定版终于来了:支持 GPU 渲染、兼容旧版本、Python API 升级
  17. filer.js: 一个 Unix 命令风格的 HTML 5 FileSystem API 封装 - V2EX
  18. vsCode 快捷键
  19. 经典的arena内存池实现-levelDB的内存池实现
  20. 手机音视频流媒体开发一些有用资料

热门文章

  1. 描绘质量属性的六个常见属性场景。
  2. PhpStorm无法获取Post数据 配置
  3. ffmpeg 转换VC工具已经可以生成工程文件
  4. 取PE文件OriginalFilename-解析VERSION资源
  5. 标记语言——邪恶的表格?
  6. 2019,数据库行业迎50年第二次巨变
  7. warning: mysql-community-libs-5.7.11-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5
  8. 树莓派:漂洋过海来看你
  9. python中递归函数
  10. 轻量级web富文本框——wangEditor使用手册(3)——如何自定义配置菜单 demo