iPhone Application Programming Guide, Ch4

本文深入探讨了iOS应用中UI设计的核心技术,包括UIKit、CoreAnimation和Quartz2D的使用方法,详细解释了如何在不同场景下进行自定义绘图,改善绘图性能以及维护图像质量的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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

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】

 

JFM7VX690T型SRAM型现场可编程门阵列技术手册主要介绍的是上海复旦微电子集团股份有限公司(简称复旦微电子)生产的高性能FPGA产品JFM7VX690T。该产品属于JFM7系列,具有现场可编程特性,集成了功能强大且可以灵活配置组合的可编程资源,适用于实现多种功能,如输入输出接口、通用数字逻辑、存储器、数字信号处理和时钟管理等。JFM7VX690T型FPGA适用于复杂、高速的数字逻辑电路,广泛应用于通讯、信息处理、工业控制、数据中心、仪表测量、医疗仪器、人工智能、自动驾驶等领域。 产品特点包括: 1. 可配置逻辑资源(CLB),使用LUT6结构。 2. 包含CLB模块,可用于实现常规数字逻辑和分布式RAM。 3. 含有I/O、BlockRAM、DSP、MMCM、GTH等可编程模块。 4. 提供不同的封装规格和工作温度范围的产品,便于满足不同的使用环境。 JFM7VX690T产品系列中,有多种型号可供选择。例如: - JFM7VX690T80采用FCBGA1927封装,尺寸为45x45mm,使用锡银焊球,工作温度范围为-40°C到+100°C。 - JFM7VX690T80-AS同样采用FCBGA1927封装,但工作温度范围更广,为-55°C到+125°C,同样使用锡银焊球。 - JFM7VX690T80-N采用FCBGA1927封装和铅锡焊球,工作温度范围与JFM7VX690T80-AS相同。 - JFM7VX690T36的封装规格为FCBGA1761,尺寸为42.5x42.5mm,使用锡银焊球,工作温度范围为-40°C到+100°C。 - JFM7VX690T36-AS使用锡银焊球,工作温度范围为-55°C到+125°C。 - JFM7VX690T36-N使用铅锡焊球,工作温度范围与JFM7VX690T36-AS相同。 技术手册中还包含了一系列详细的技术参数,包括极限参数、推荐工作条件、电特性参数、ESD等级、MSL等级、重量等。在产品参数章节中,还特别强调了封装类型,包括外形图和尺寸、引出端定义等。引出端定义是指对FPGA芯片上的各个引脚的功能和接线规则进行说明,这对于FPGA的正确应用和电路设计至关重要。 应用指南章节涉及了FPGA在不同应用场景下的推荐使用方法。其中差异说明部分可能涉及产品之间的性能差异;关键性能对比可能包括功耗与速度对比、上电浪涌电流测试情况说明、GTH Channel Loss性能差异说明、GTH电源性能差异说明等。此外,手册可能还提供了其他推荐应用方案,例如不使用的BANK接法推荐、CCLK信号PCB布线推荐、JTAG级联PCB布线推荐、系统工作的复位方案推荐等,这些内容对于提高系统性能和稳定性有着重要作用。 焊接及注意事项章节则针对产品的焊接过程提供了指导,强调焊接过程中的注意事项,以确保产品在组装过程中的稳定性和可靠性。手册还明确指出,未经复旦微电子的许可,不得翻印或者复制全部或部分本资料的内容,且不承担采购方选择与使用本文描述的产品和服务的责任。 上海复旦微电子集团股份有限公司拥有相关的商标和知识产权。该公司在中国发布的技术手册,版权为上海复旦微电子集团股份有限公司所有,未经许可不得进行复制或传播。 技术手册提供了上海复旦微电子集团股份有限公司销售及服务网点的信息,方便用户在需要时能够联系到相应的服务机构,获取最新信息和必要的支持。同时,用户可以访问复旦微电子的官方网站(***以获取更多产品信息和公司动态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值