ios工程师个人简历

2024-07-16

ios工程师个人简历(精选10篇)

ios工程师个人简历 篇1

xx

个人信息

姓 名:xx 专 业:软件工程

学 历:本 科 工作经验:1年

移动电话:xxxxxxxxxxx 电子邮件:xxxxxxxxxxxx@163.com

求职意向 iOS开发工程师

工作经验 2013.6-2014.5 上海闪酷信息技术有限公司 iOS开发部 iOS开发工程师

工作描述: 1. 负责公司iOS平台下的iPhone应用程序的软件设计及开发;

2. 参与项目需求分析,产品模块的概要和详细设计;

3. 改善软件的性能,提高用户体验;

4. 根据公司的要求书写相应的技术文档;

专业技能

1.熟练掌握Object-c/c,了解C++,对Object-c的内存管理机制有较好的理解

2.熟练掌握MVC、单例、观察者、代理、工厂等设计模式

3.熟练掌握Json/XML解析等

4.熟悉 socket通信、TCP/UDP和HTTP协议

5.熟悉支付宝,二维码等

6.熟练掌握SQLite数据库,实现本地缓存与清除

7.熟练使用NSTread,GCD,NSOperation多线程开发

8.熟练操作App上架及版本更新

9.熟练使用SVN代码管理工具

10.熟悉C#及.Net

iOS 项目

1.项目名称:微吼(即将上线)

软件环境:Mac OS X 10.9

开发工具:Xcode5.0.2 + ios7.0

项目描述:该软件是一款商务视频社交应用,汇集各类顶尖峰会,行业沙龙,财经路演等 精彩直播,在微吼,你可以围观,更可以参加话题讨论,加入感兴趣的圈子, 更能成为万人瞩目的焦点。微吼让人人都有一个直播间。

应用技术:1.利用Rtmp协议进行视频直播

2.ShareSDK第三方登陆及分享

3.M3U8封装

4.视频播放器的定制

责任描述: 三人项目。本人负责:

1.实现第三方登陆及分享功能

2.根据需求自定义控件

3.m3u8格式封装

4.发表评论类似于贴吧功能

2.项目名称:易家(已上线)

软件环境:Mac OS X 10.8.5

开发工具:Xcode5.0.2 + ios7.0

项目描述:该软件是大亚智能家居安防产品的配套应用,让用户可以通过移动设备来远程

控制灯光、窗帘、插座等家居设备,通过智能定时联动的控制整个家居场景,

实现家居的智能化;通过全体布防、全体撤防、在家布防等安防场景,高清摄

像头远程实时监控家中的情况,实现家居的安全化;与此同时还能通过此应用

控制家庭多媒体影音系统,实现了多屏互动功能;远程浏览与管理网盘上的文

件和资料。

应用技术: 1.利用会话层协议进行底层控制

2.利用Scoket进行文件管理

3.利用Upnp实现推送

责任描述:三人项目。本人负责Upnp推送

3.项目名称:不打烊(已上线)

软件环境:Mac OS X 10.8.5

开发工具:Xcode5.0 + ios7.0

项目描述:该软件是一款本地O2O电子商务平台应用,承诺将消费者需要的产品以最便宜 在10-30分钟内送货上门,通过线上线下结合建设本地O2O综合服务平台。线 上的电子商务平台将覆盖本地商业和服务各领域。线下开设连锁便利店,提供 快速消费品,日用品和一站式生活服务。

应用技术: 1.不同的定制cell,瀑布流及动态效果的实现。

2.josn及XML数据解析

3.实现商品扫描及分享功能

4.利用CoreData实现数据缓存

5.调用支付宝快捷支付接口

责任描述: 个人项目。本人负责:

1.实现登陆注册及分享功能

2.实现商品条形码.二维码扫描功能

3.实现商品关键字检索功能模块及图片图片轮番展示

4.加入购物车及调用支付宝快捷支付接口

4.项目名称:外勤宝(已上线)

软件环境:Mac OS X 10.8.3

开发工具:Xcode4.6.3 + ios6.0

项目描述:该软件是解决企业对外勤人员的有效管理的一款应用。可以与PC端的管理人员 进行便捷的基于位置的信息交互。是企业外勤人员的得力助手.注:企业级账号 发布到公司平台

应用技术:1.cell的自定制。

2.XML及Json数据解析

3.网络数据的异步下载,及图片的异步加载

4.百度地图SDK

责任描述: 两人项目

1.整体界面的搭建以及自定义控件

2.地图导航及自定义标注

教育背景 .09—2014.06 xxxxxxxx 本科 软件工程

自我评价 具有良好的表达沟通能力,善于思考.对工作认真负责。能对新技术自学并熟练掌握, 协调性好,团队项目个人项目均可胜任。具有较强的抗压能力。性格开朗、乐观、具有良好的团队合作精神,能很快适应公司文化。

ios优秀简历 篇2

基本信息

姓 名:李xx 性别:男

婚姻状况:已婚 民族:汉

户 籍:浙江 年龄:24

现所在地:温州 身高:1.76cm

联系电话:131******

电子邮箱:jXXnli.jXXX.com

求职意向

求职目标:iOS软件开发实习生

工作年限: 职称:

期望月薪:面议

求职类型:全职

到岗时间:随时

项目经历

.08-2014.12 学霸 iOS客户端开发(实习生)

一个服务于学校的APP开发,可以实现一些校内事物的查询,以及学习任务的布置等。参与部分:部分界面的搭建,Profile功能的实现。

.03-2015.05 EZcook iOS客户端开发(实习生)

一个美国外包项目。项目主要内容是记录家中的食材,通过互联网获取剩余食材可制作的菜谱、上传菜谱等功能。参与部分:界面的.搭建,添加菜谱部分功能的实现,菜谱列表排序,部分shareSDK的分享功能实现。

2015.09-2015.10 IQsign iOS客户端开发(实习生)

参加乐科科软件大赛,自主设计了一个利用人脸识别进行签到的APP,可以对于校园考勤,防作弊以及企业考勤进行使用(进入软件大赛决赛)。参与部分:全部开发。

教育背景

毕业院校:浙江理工学院

最高学历:本科

毕业日期:2015.6

专业:软件工程

主修课程:C程序设计、面向对象程序设计(JAVA)、数据库系统原理、操作系统与实验、软件工程导论、算法导论、C++程序设计、Web程序设计(JSP)、C#程序设计、计算机网络与实验、软件外包日语、软件过程与管理、软件体系结构、软件测试、安卓开发技术、Web数据挖掘、数据结构与算法、UML与面向对象分析与设计、大学英语、离散数学等。

奖项荣耀

- 获浙江大学宁波理工学院数学建模校内赛 一等奖

2012-2013 获浙江大学宁波理工学院六大联赛乒乓球比赛男团 第一名

2013-2014 获数学建模全国机电工程杯 三等奖

2013-2014 获全美大学生数学建模比赛(美国赛)参赛奖

2014-2015 获浙江大学宁波理工学院 srpip项目大赛 一等奖

自我评价

ios工程师自我介绍 篇3

it’s a great pleasure for me to have this opportunity for the interview.i hope i can make a good performance today.

i have always enjoyed working with computers,so it was an easy decision to major in information and computing science at hunan university of science and technology with a plan to enter it field.

i spent most of my time on study, and i’ve passed cet-6 during my college years. and i’ve acquired basic knowledge of my major. it is my long cherished dream to be a software engineer and i am eager to get an opportunity to fully play my ability.

iOS产品开发工程师自我鉴定 篇4

1:为什么做iphone开发?

很久很久以前,在诺基亚的时代就有做移动应用的想法了,不过当时不知道是不是叫移动应用,那时候的智能手机不太智能,应用也不那么好用。由于当时还在上学,只是有这个想法,并没实践,也不知道怎么把程序装到手机里。后来塞班火了,就买了一本塞班的书,但是工作忙碌也就没看(庆幸ing..),再后来案桌/苹果都火了,开始准备学案桌,买了htcg1,一堆教材,写了一大堆各式各样的helloword,不过看案桌的系统架构,上面还弄个java虚拟机一样的运行时环境,很反感(一直从事unix/c语言方面的工作)。在后来就发现ios用oc开发,看名字,oc好像和c差不多,对c有好感,于是一边工作一边学......

一边学一边想着月入百万。总觉得写出来应用放在商店里就能变成暴发户了。正巧当时在一家大公司工作,虽然薪水还可以,但是每天写那些毫无技术含量的模块,说实话那根本就用不着程序员来做,只要长个手,会复制粘贴就可以去做了。这种工作对自己的技术/人生毫无帮助,唯一的收获就是发薪水。行尸走肉的过了不知道多久,决定辞职,全职自己做ios算了。

2:怎么学?

(1)能不能自学:很多人问我这个问题,其实根本没有能不能的问题,只有喜欢不喜欢,坚持不坚持。没基础可能有点难度,有其他语言基础的话,学这个太小儿科了。我从最初汇编-c语言到现在一直自学,不能说学的有多好,但至少能找工作打工了。

(2)怎么学:看书,努力,没有捷径,曾看到前辈开玩笑说怎么快速学会某技术,答案是:“提高打字速度,快点写代码就能快点学会了”。呵呵,每各行业都一样,想要一天学有所成是不可能的,一定要做好长期努力的`准备,做ios开发并不只是简单的学会oc语言,ios是一整个平台,语言只是学习过程中很小的一部分。速成的方法往往有很多弊端,想要做好还是要从基础一点一点的打,我从开始接触ios到写出第一个程序(没上线),大约用了近半年的时间。本人自觉c语言功底不错,当时已经参加工作2年多了,主要做linux嵌入设备开发,也做过windows的上位机程序。

ios工程师个人简历 篇5

软件测试作为软件质量把关的重要环节,已经愈来愈引起国内软件企业的关注,致使软件测试人才的需求升温,但是,由于我国企业对于软件测试技术在整个软件行业中的重要作用认识较晚,因此,这方面的专业技术人员在国内还是凤毛麟角,人才供需之间的缺口超过20万,这已成为影响中国软件产业发展的瓶颈。据招聘网站51job数据显示,软件测试工程师将成为最紧缺的人才,该类职位的需求主要集中在沿海发达城市,其中北京、上海的需求量分别占33%和29%.同一时间中华英才网发布了最新一期的IT职场人气排行榜,IT人才仍是企业需求量最大的人群,其中软件测试工程师、高级程序员、产品项目经理等高

级职位进入“三甲”,成为IT就业市场最新风向标。作为软件开发流程中的重要一环,软件测试岗位渐渐“浮出水面”,并凭借其庞大的人才需求和广阔的职场发展前景日渐成为IT职场就业的大热门。

软件测试工程师所具备的职业素质

一、专业技能

计算机领域的专业技能是测试工程师应该必备的一项素质,是做好测试工作的前提条件。尽管没有任何IT背景的人也可以从事测试工作,但是一名要想获得更大发展空间或者持久竞争力的测试工程师,则计算机专业技能是必不可少的。

专业技能主要包含三个方面:测试专业技能,软件编程技能,网络、操作系统、数据库、中间件等知识。

软件编程技能实际应该是测试人员的必备技能之一;在微软,很多测试人员都拥有多年的开发经验。因此,测试人员要想得到较好的职业发展,必须能够编写程序。只有能给编写程序,才可以胜任诸如单元测试、集成测试、性能测试等难度较大的测试工作。依据资深测试工程师的经验,测试工程师至少应该掌握Java、C#、C++之类的一门语言以及相应的开发工具。

二、行业知识

行业主要指测试人员所在企业涉及的行业领域,例如很多IT企业从事石油、电信、银行、电子政务、电子商务等行业领域的产品开发。行业知识即业务知识,是测试人员做好测试工作的又一个前提条件,只有深入地了解了产品的业务流程,才可以判断出开发人员实现的产品功能是否正确。行业知识与工作经验有一定关系,通过时间即可以完成积累。

一个优秀的软件测试工程师除了具备“专业技能、行业知识”外,还必须具备相应的:交流技巧、组织技能、实践技能和态度(除了技术水平,需要理解和采取适当的态度去做软件测试。)

三、个人素养

作为一名优秀的测试工程师,首先要对测试工作有兴趣:测试工作很多时候都是显得有些枯燥的,因此热爱测试工作,才更容易做好测试工作。因此,除了具有前面的专业技能和行业知识外,测试人员应该具有一些基本的个人素养,即下面的“五心”。

1.专心:主要指测试人员在执行测试任务的时候要专心,不可一心二用。经验表明,高度集中精神不但能够提高效率,还能发现更多的软件缺陷,业绩最棒的往往是团队中做事精力最集中的那些成员。

2.细心:主要指执行测试工作时候要细心,认真执行测试,不可以忽略一些细节。某些缺陷如果不细心很难发现,例如一些界面的样式、文字等。

3.耐心:很多测试工作有时候显得非常枯燥,需要很大的耐心才可以做好。如果比较浮躁,就不会做到“专心”和“细心”,这将让很多软件缺陷从你眼前逃过。

4.责任心:责任心是做好工作必备的素质之一,测试工程师更应该将其发扬光大。如果测试中没有尽到责任,甚至敷衍了事,这将会把测试工作交给用户来完成,很可能引起非常严重的后果。

5.自信心:自信心是现在多数测试工程师都缺少的一项素质,尤其在面对需要编写测试代码等工作的时候,往往认为自己做不到。要想获得更好的职业发展,测试工程师们应该努力学习,建立能“解决一切测试问题”的信心。

“五心”只是做好测试工作的基本要求,测试人员应该具有的素质还很多。例如测试人员不但要具有团队合作精神,而且应该学会宽容待人,学会去理解“开发人员”,同时要尊重开发人员的劳动成果--开发出来的产品。

国内外软件测试工程师职业发展走向和薪资分布

软件测试工程师作为软件质量的把关者,其职能在于保证交付到客户手中的软件可靠好用,运行畅通无阻。从产品定义到产品开发再到产品维护,都离不了软件测试。但由于软件测试的重要性是近两年才被充分认识到的,高校教育和企业培养都还没有跟上,致使软件测试人才严重供不应求,出现跑步上岗、快速提升的状态,薪资也逐步走高,优秀的软件测试人才年薪可达十万,甚至二、三十万或更高。

学软件开发到四维梦工场

四维梦工场常年开设有安卓软件开发、iOS软件开发等热门专业。经过多年的努力,目前已成为华中地区知名的手机软件开发培训品牌,并被国家工信部3G项目管理中心授权为湖北3G工程师指定考试中心以及湖北动漫游戏高端教育诚信品牌。

ios工程师个人简历 篇6

伴随着技术的革新与发展,越来越多的交互体验模式正在孕育而生。设计师的创作思路得以扩展,技术开发人员也拥有了更多高效的方法和工具来准确的实现设计方案。设计与开发之间的障碍正在被各种新技术不断的突破,项目中一些职能角色的性质也在发生着变化,越来越多的设计师超越了相对传统的专职领域,开始直接进行开发方面的工作。

对于团队来说,那些同时掌握着设计与开发技能的人员是非常有价值的。我们所说的这种“掌握”不单单是指对于技术概念或术语有基本程度的了解,更重要的是,设计师需要对开发技术在各方面的特性及优缺点做到心中有数,并能针对这些特性来创造最合理的设计方案。

当然,要设计人员或团队完全精通某种开发技能,并且在相关平台中有过大量实战经验,这是不现实的,也没有必要。不过,如果设计师曾经切身实践过开发方面的工作,或是参加过相关的内部培训,那么这些经历通常可以有效地帮助他们打造出更具可行性的设计方案。另外一方面,不妨向更加专业的技术人员进行请教,让他们帮忙找出那些有可能对设计方案的实现与还原造成影响的潜在因素。

接下来,我们将一同了解一些在iOS当中负责实现各种视觉交互表现形式的核心技术,并对它们各自的功能进行分析。这些技术知识会帮助你对设计方案的可行性及相关的开发方式做到心中有数。

除此之外,我们还将了解一些其他方面的话题,包括界面外观的自定义、通用型应用、原生应用与Web应用的差异等。

关键性的图形技术

作为设计人员,你需要对四种关键性的图形技术有所了解。它们可以被分为两大类,第一类是用于支持iOS本地渲染的苹果专有技术,而第二类涉及到OpenGL,这种第三方技术可以有效地利用硬件加速功能渲染复杂的图形。怎样从设计的角度来理解这些概念呢?简单的说,第一类技术用于打造用户界面及相关交互元素的视觉表现形式,而与OpenGL相关的第二类技术的主要作用,则是在游戏或类似的上下文环境中对各种极端复杂的图形和动画效果进行即时渲染。

需要注意的一点是,这些技术虽然各司其职,但并非只能专门用作各自的上下文领域。通过对这些技术的作用加以理解,你就可以对设计方案的实现方式做到心知肚明。特别是当你正在尝试一些独特的交互形式的时候,对于相关实现技术的了解就显得尤为重要了。

UIKit

UIkit是用来打造iOS应用的最重要的图形技术框架,它提供了用于构造触屏设备用户界面的全部工具和资源,并在整个交互体验的塑造过程中扮演着至关重要的角色。

设计方案中的绝大部分内容都需要通过UIKit来实现,因为用户在iOS中所接触到的任何一种用户界面控件都由它来负责定义和输出,包括基本的按钮、滑块、文本域、切换开关等。除了这些标准控件之外,UIKit还提供了很多方法来帮助我们对控件的外观进行自定义。所以在界面元素的视觉表现形式上,我们不必受制于各种控件的默认样式。外观自定义工作还会涉及到我们将要在后文中了解到的其他图形技术,但是相关的解决方案都是由UIKit在整体上控制的。

除了能够使用你所指定的图形文件(例如PNG图片)对界面控件的外观进行自定义之外,UIKit还能够程序化的渲染图形对象,换句话说,它可以按照我们设定好的规则来绘制图形。UIKit在这方面的能力与一些常见的矢量图形绘制技术很相似。在类似的方法中,我们通常需要定义最基础的几何图形或路径,然后为这些路径赋予具体的视觉属性,以实现设计中的目标样式。不过有一点需要提醒一下:这种程序化的绘图方式确实可以对生产效率起到一定的提升作用,然而另外一方面,你却需要花费更多的时间与精力去跟进到接下来开发流程当中,以确保技术人员所定义的图形属性可以精确的还原你的设计方案。在实际项目中,最好能够在开发流程之前与相关的技术人员一同对设计方案中的每一个细节进行充分的评估,确定一套最合理的图形技术方案。

核心图形 (Core Graphics)

核心图形是用来实现用户界面视觉设计方案的重要技术框架。这套框架的核心是名为Quartz 2D的二维图形渲染引擎,它不仅可以动态地渲染很多不同种类的图形,而且还可以使应用具有创建和编辑图像的能力。

你可以将核心图形理解成一种能够帮助你扩展产品功能的技术框架。相比于UIKit,它更擅长于处理那些较为复杂的图形;不过在必要的时候,也可以用来对普通用户界面元素进行渲染。相比之下,UIKit在界面外观自定义方面的支持能力更强。所以,只有当设计方案涉及到相对复杂的图形变换、队列处理和即时合成等方面的需求时,核心图形技术框架才能真正体现出它的优势与价值。

核心动画(Core Animation)

核心动画向开发者们提供了一套用于创建和渲染动态交互效果的简单易行的解决方案。换句话说,这项技术可以让你的设计方案真正动起来。通过与UIKit的紧密配合,核心动画可以将界面交互对象与动画过渡效果进行完美地整合。

作为一种强大的技术工具,核心动画的能力范围是非常广泛的,它能使开发者在很多不同的层面上创建并控制交互对象的动画属性,而这对于设计师来说,则意味着能够实现的独特而高度定制化的动画效果的可能性几乎是无限的。

OpenGL ES

OpenGL ES与前面几项技术有所不同,它并非苹果所创造并独有的。OpenGL ES是面向嵌入式设备的OpenGL 3D图形应用程序接口(API),它必须与核心动画协同配合,完成2D或3D图形内容的渲染输出。

OpenGL ES可以通过硬件加速功能来渲染那些极端复杂的图形,所以这项技术通常被用来在游戏当中绘制那些需要进行即时渲染的3D图形。不过它的能力不限于此,通过与我们在前面了解到的那些技术的整合,它同样可以被用来渲染普通的元素,甚至还能以全3D的方式打造整个应用的界面环境。

是否有必要在应用的开发中使用这项技术,最终还是取决于设计方案所要求的视觉表现形式。对于那些没有必要通过硬件加速功能来即时快速渲染的2D或3D图形,其他技术同样可以胜任。不过,如果你希望借助强大而复杂的技术工具对那些具有实验性质的视觉交互形式进行探索和挖掘,那么OpenGL ES的强大能力将不会让你失望。

界面外观的自定义

究竟有没有必要对应用的界面外观进行自定义?在打造设计方案的时候,我们通常会在这个问题上产生纠结。特别是在苹果刚刚推出应用商店的时候,这个问题显得尤其普遍与突出。为了能够尽快地将应用发布出去,以占领市场先机,产品决策者们宁愿放弃掉很多至关重要的设计流程,以达到压缩产品开发进度的目的。如今,从整个应用市场的角度来说,这种局面有所改善,人们再也不能忽视设计的重要性了,但是对于一些刚刚试水iOS应用的团队来说,类似的问题依然存在,

很多公司和产品团队总是无法意识到高度定制化的界面外观对于一款应用产品的重要价值。其实道理很简单,如果只使用SDK(开发工具包)提供的默认控件来构筑用户界面,你的应用就会完全处于iOS原生的视觉识别体系当中,在用户体验方面也无法超越苹果制定的范围框架。虽然从本质上讲,这并不是一件坏事,但这种方式显然无法将具有品牌特色的用户体验效应整合到产品当中;无论是视觉表现形式还是交互方式,都难以满足用户对于差异化的渴望。

抛开产品策略方面的因素,界面外观的自定义工作在技术层面不存在任何障碍。正如我们在前文中看到的,苹果在这方面有针对性的为开发者们提供了很多强大的图形技术。从某种程度上说,这项工作本应该成为整个设计开发流程中的一个重要且必要的组成部分。

有一点需要说明的是,界面外观自定义的设计原则并非是泾渭分明的,实际上你确实不需要对所有的界面组成要素都进行定制化的处理,在很多情况下,使用SDK提供的原生控件反而更加合理。作为设计师,你要做的就是处理好原生控件与自定义样式之间的关系,将它们协调的整合在一起,确保用户不会对这两类元素产生彼此孤立与分化的感知。

除了使用新的图形样式对各种常规界面元素的外观进行自定义之外,你还可以创造出全新类型的的界面交互对象,并为它们赋予独特的交互方式。不过,对于这种明显超出了“换肤”范畴的做法,苹果在用户界面设计规范当中所体现出的态度并不是具有鼓励性的,因为全新类型的交互对象会对用户的认知造成很大的障碍。作为规范,持有相对谨慎的态度是合乎情理的,不过这种具有极高创新性质的做法究竟能否成功,在很大程度上还取决于设计方案本身。过于隐晦的表现形式必然会使用户产生迷惑与挫败的感觉,无论它看上去有多酷;而简单直白、易于理解的方案则具有相当高的可行性。

通用型应用

在过去的几年中,iOS设备种类及规格的扩大发展为应用设计师与开发者带来了不少挑战。从前,我们只需要为一种设备规格打造设计方案;随着iPad的到来,事情开始变得复杂起来,我们必须针对新设备的特性考虑另外一个版本的设计方案。而开发团队也面临着同样的问题,他们必须同时开发和维护两个版本的应用,工作量几乎翻倍。

不久之前,通用型应用的概念出现在了应用商店当中,这种应用可以运行在任何类型的iOS设备当中。它会自动判断当前的设备环境,并在用户体验形式上作出相应的调整,例如可以通过不同的方式对用户界面进行渲染,在功能方面也会根据当前平台的具体情况发生相应的改变。

对技术开发人员来说,通用型应用是个好消息,它可以避免不同版本所带来的重复性工作,极大地提高开发流程的生产效率。不过站在设计师的角度,你仍然需要准确的把握不同设备在用户行为及体验模式上的差异,确保设计方案可以适用于它们各自的系统平台。而这种方式带来的进步也是显而易见的。在必须针对不同设备打造两个独立版本的情况下,你需要对已有的一套设计方案进行改造,在界面元素和交互形式等方面进行全方位的调整,以适应新的设备平台,这必然会导致两个版本的应用在界面外观和操作方式等方面存在显著的差异;而对于通用型应用,你可以在设计过程中预先考虑到两种设备的不同特性,并且能够在同一套设计方案中针对这些差异来定义局部样式或功能的响应式调整规则,从最大程度上确保用户体验的一致性。很多同时拥有两款设备的用户会在不同的需求情景中使用不同的设备来操作同一款应用,在这种情况下,具有高度一致性的界面外观及交互方式就显得尤为重要了。

原生应用与Web应用

如今,关于是否真正有必要开发iOS原生应用的问题,行业中还存在一些争论。在当前复杂纷乱的移动市场中,除非你有足够的资源,否则为每一种设备平台都单独打造一套原生应用确实是不大现实的。在很多情况下,移动版本的网站或是Web应用都可以很好的满足需求。不过,在你着手于Web方向的解决方案之前,有一些重要的问题必须事先了解清楚。

在用户体验方面,Web应用与原生应用之间的差距还是很明显的。如今,有很多前端开发技术框架可以帮助我们打造基于浏览器运行的Web应用。这些应用无论在界面外观还是交互方式上都与原生应用非常相似。然而,在实际的移动设备上下文环境中,它们仍然无法与原生的方式相提并论。正像我们在前文中了解到的,苹果为开发者们提供了很多强大的图形技术工具,作为设计师,我们不仅可以在设计方案中打造高度定制化的界面外观及交互效果,更重要的是,这些视觉表现形式都是在系统级别甚至硬件级别的功的支持下高性能的展现出来的。相比之下,基于浏览器运行的Web应用解决方案通常只能提供数量非常有限的交互效果,而且在性能方面更是无法与原生应用相比。所以,如果你正在考虑使用Web应用的方式来打造产品,至少要确保你的设计方案当中不会涉及到过多的视觉交互效果。

其实,对于这两类应用,我们并不需要争论出一个非此即彼的结果,因为iOS允许这两种形式在同一款应用中兼容并包的存在,一款原生应用当中完全可以同时包括本地化的界面控件与基于Web的页面元素。这种混合型应用可以将两者的优势淋漓尽致地发挥出来,使其自身即能拥有原生应用高性能的表现力以及对硬件功能的访问能力,同时又具备Web应用的动态性与灵活性,并且更加易于维护。

最终,对于解决方案的选择仍然取决于产品自身的功能及用户体验需求。任何关于产品实现方式的讨论都必须从这个角度出发。

总结

苹果为开发者们提供了四种用于渲染界面对象和视觉交互效果的关键性图形技术:

UIKit:用于绘制界面元素的最重要的图形技术框架,在整个交互体验的塑造过程中扮演着至关重要的角色。

核心图形(Core Graphics):二维图形渲染引擎, 可以动态地渲染很多不同种类的图形,并能使应用具有创建和编辑图像的能力。在必要的时候,也可以用来对普通用户界面元素进行渲染。

核心动画(Core Animation):可以在UIKit的配合下,为用户界面中的交互对象创建动态的视觉效果。

OpenGL ES:面向嵌入式设备的OpenGL 3D图形应用程序接口(API),可以通过硬件加速功能来渲染具有高性能表现的2D或3D图像。

以这些图形技术为后盾,我们可以在设计中大胆地尝试高度定制化的用户界面外观与独特的交互表现形式,甚至可以对交互对象的视觉行为属性进行实验性的探索。

IO总结 篇7

IO分类输入 和 输出 流节点流 和 处理流字节流(byte)和 字符流(char)

输入流

字节流

抽象基类 InputStream

读取文件的 FileInputStream

缓冲流 BufferedInputStream

读取各种java基本数据类型的 DataInputStream

读取对象 ObjectInputStream

字符流

抽象基类 Reader

读取文本文件的 FileReader

实现缓冲的 BufferedRead 读取一个行 readLine();newline()输出流

字节流

抽象基类 OutputStream

写文件的 FileOutputStream

缓冲输出流 BufferedOutputStream

写各种java基本数据类型的 DataOutputStream

写对象的 ObjectOutputStreamwriteObject(Object obj);字符流

对象的序列化

一个对象所属的类如果实现java.io.Serializable

IOS 启动画面 篇8

在AppDelegate.m 中 修改如下

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

[NSThreadsleepForTimeInterval:2];

// Override point for customization after application launch.

return YES;

}

目前iOS主流的几种设备分辨率如下:

iPhone 1(指第一代iPhone),iPhone 3G,iPhone 3GS ,iPod Touch 1,iPod Touch

2,iPod Touch

3

分辨率为320x480(宽x高 3:2),欢迎图片命名为Default.png;

iPhone 4,iPhone 4S ,iPod Touch

4

分辨率为640x960(16:9),欢迎图片命名为Default@2x.png;

iPhone5 分辨率为 640x1136,欢迎图片命名为Default-568h@2x.png;

iPad 1,iPad2,iPad mini

分辨率为768x1024

欢迎图片命名为Default~ipad.png,

New iPad(iPad 3),iPad 4 分辨率为1536x2048

欢迎图片命名为Default~ipad@2x.png

iOS图标设计思路 篇9

表现形态

在有限的空间里表达出相对应的信息,在iOS 程序图标设计中,直观是第一个解决的问题,不应该出现大多繁琐的修饰,当然还要有很好的视觉表现力,使用户可以更容易理解此应用的实际作用,更轻松地辨识此应用。下面来说说几种表现的形态。

图形表现

在只用图形表现应用程序的用途,图形可以很好地吸引用户的眼球,更具象地表现出信息。

文字表述

文字表现是一种非常直观的表现方法,文字应该简洁明了,不繁琐。

图形和文字结合

此形式有很好的表现力之余还可以直接把信息告知用户,因为会有一定的内容,所以在空间布局上要注意疏密,避免繁琐拥挤。

iOS 程序图标特性

iOS系统桌面图标与其他移动系统的图标存在非常大的区别,因为iOS图标有很好的整体性,良好的整体性可以减少用户体验上带来的冲突,所以我们需要保持其中的一些特点,以便程序可以更好融入系统中,带给用户更好的应用体验。

尺寸

在不同设备的iOS系统桌面中,程序图标的尺寸和默认自带的修饰效果会有不同,系统默认自带的修饰效果可以使图标更好保持iOS风格,但很多时候为了实际效果,我们可以要求系统不作部分效果的添加,以便达到我们想要的效果。

上传到App Store需要512px X 512px的图片 在iPhone 960px X 640px分辨率中 图标显示尺寸 114px X 114px 20像素的圆角

4像素的90度黑色投影 2像素的90度白色内投影 默认自带的高光

在iPhone 480px X 320px分辨率中 图标显示尺寸 57px X 57px 10像素的圆角

2像素的90度黑色投影 1像素的90度白色内投影 默认自带的高光

在iPad 1024px X 768px分辨率中 图标显示尺寸 72px X 72px 13像素的圆角

2像素的90度黑色投影 1像素的90度白色内投影 默认自带的高光

质感

在iOS中,为表现图标的质感,很多时候都会为其添加一些光感,使其更有质感。光是从上面来的,所以过渡颜色的渐变应该是从上往下的。很多时候为表现iOS系统类似玻璃质感般的感觉,图标底部都会带有一个亮度较高的反光,当然这些都是以我们想要的实际效果而绘制添加。

iOS 程序图标设计的构思

为表达好应用程序的作用,我们可以将应用程序的图标作很多不同视觉效果的处理,以达到更好的视觉享受。不同类型的应用要注意表现的效果,如新闻资讯类的应该简洁一点,使其应用有更好的整洁的感觉,如游戏类可以设计得给用户一种活跃的感觉,如一些日常应用类的我们很多时都会将其拟物化,使用户更直观地感受到其作用,这种方法是我们最常见的。

在这里着重说一下拟物化程序图标,这是非常具象去表现程序用途的方法,但有时候要表现的元素存在几个的时候,在狭小的空间中不一定能放下如此多的元素,所以要分析轻重,轻的可以减少占据位置的比例或者将其去除,重的要多作强调,同时,要找到多样元素中的共性。

我们只需找到共性,就能构想出不错的创意。

在图形的构思上有时我们可以利用iOS图标的圆角制作一些特殊的感觉效果处理,如立体感,这些可以帮助图标有更好的视觉冲击力,更容易获取用户的喜爱与点击。

实践分享

说了这么多,下面我们马上来从零开始构思和绘制精美的iOS应用程序图标。

程序名称:MyRange平台:iPhone 版本:V0.001 出版商:UEDC 用途:LOMO拍照软件

首先说明的是,设计的方法不是唯一的,构思和绘制的方法也是无限多的,那么马上开始!

想到拍照软件,首先会想起的是相机,那么相对应这个软件的图标可以绘制一个LOMO相机作尝试。

很多时我们为了使绘制的物品视觉效果更好,我们需要一些参照物,这次我用莱卡M9来做参照物。在参照物得基础上,进行更多个性化的处理。

为了视觉效果更好,我想其有一点透视的感觉,那么可以利用iOS图标圆角的特征,形成一种立体的感觉。

之后给图标上色,将各大部分大致的颜色分出来

绘制出各部分的质感,应有的皮质和金属的质感,制造金属的可以添加一点杂色

iOS 图形编程总结 篇10

这些api包含的绘制操作都在一个图形环境中进行绘制。一个图形环境包含绘制参数和所有的绘制需要的设备特定信息,包括屏幕图形环境、offscreen 位图环境 和PDF图形环境,用来在屏幕表面、一个位图或一个pdf 文件中进行图形和图像绘制。在屏幕图形环境中进行的绘制限定于在一个UIView 类或其子类的实例中绘制,并直接在屏幕显示,在offscreen 位图 或 PDF图形环境中进行的绘制不直接在屏幕上显示。

1 、UIKIT API

UIKIT是一组Objective-C API,为线条图形、Quartz图像和颜色操作提供Objective-C 封装,并提供2D绘制、图像处理及用户接口级别的动画。

UIKIT包括UIBezierPath(绘制线、角度、椭圆及其它图形)、UIImage(显示图像)、UIColor(颜色操作)、UIFont和UIScreen(提供字体和屏幕信息)等类以及在位图图形环境、PDF图形环境上进行绘制和 操作的功能等, 也提供对标准视图的支持,也提供对打印功能的支持。

在UIKIT中UIView类本身在绘制时自动创建一个图形环境(对应Core Graphics层的CGContext类型)作为当前的图形绘制环境。在绘制时可以调用UIGraphicsGetCurrentContext 函数获得当前的图形环境。

2 、Core Graphics 与Quartz 2D API

Core Graphics是一套C-based API, 支持向量图形,线、形状、图案、路径、剃度、位图图像和pdf 内容的绘制。

Quartz 2D 是Core Graphics中的2D 绘制呈现引擎。Quartz是资源和设备无关的,提供路径绘制,anti-aliased呈现,剃度填充图案,图像,透明绘制和透明层、遮蔽和阴影、颜色管理,坐标转换,字体、offscreen呈现、pdf文档创建、显示和分析等功能。

Quartz 2D能够与所有的图形和动画技术(如Core Animation, OpenGL ES, 和 UIKit 等)一起使用。

Quartz采用paint模式进行绘制。

Quartz 中使用的图形环境也由一个类CGContext表示。

在Quartz 中可以把一个图形环境作为一个绘制目标。当使用Quartz 进行绘制时,所有设备特定的特性被包含在你使用的特定类型的图形环境中,因此通过给相同的图像操作函数提供不同的图像环境你就能够画相同的图像到不同的设备上,因此做到了图像绘制的设备无关性。

Quartz 为应用提供如下几个图形环境:

1)位图图形环境,用来创建一个位图。

使用函数CGBitmapContextCreate来创建。

2)PDF图形环境,用来创建一个pdf文件。

Quartz 2D API提供了两个函数来创建一个PDF图形环境:

CGPDFContextCreateWithURL,带有一个作为pdf 输出的位置的Core Foundation URL来创建一个pdf 图形环境。

CGPDFContextCreate, 当想PDF 输出到一个data consumer时使用该函数。

3) 窗口图形环境,用来在一个窗口上进行绘制。

4) 层环境(CGLayer) ,是一个与另一个图形环境关联的offscreen绘制目标,使用层环境的目的是为了优化绘制层到创建它的图形环境的性能。层环境能够比位图图形环境提供更好的offscreen绘制性能。

Quartz提供的主要类包括:

CGContext:表示一个图形环境;

CGPath:使用向量图形来创建路径,并能够填充和stroke;

CGImage:用来表示位图;

CGLayer:用来表示一个能够用于重复绘制和offscreen绘制的绘制层;

CGPattern:用来表示Pattern,用于重复绘制;

CGShading和 CGGradient:用于绘制剃度;

CGColor 和 CGColorSpace;用来进行颜色和颜色空间管理;

CGFont, 用于绘制文本;

CGPDFContentStream、CGPDFScanner、CGPDFPage、CGPDFObject,CGPDFStream, CGPDFString等用来进行pdf文件的创建、解析和显示。

3、OpenGL ES和GLKit

OpenGL ES是一套多功能开放标准的用于嵌入系统的C-based的图形库,用于2D和3D数据的可视化。OpenGL被设计用来转换一组图形调用功能到底层图形硬件(GPU),由GPU执行图形命令,用来实现复杂的图形操作和运算,从而能够高性能、高帧率利用GPU提供的2D和3D绘制能力。

OpenGL ES规范本身不定义绘制表面和绘制窗口,因此ios为了使用它必须提供和创建一个OpenGL ES 的呈现环境,创建和配置存储绘制命令结果的framebuffer 及创建和配置一个或多个呈现目标。

在 IOS中使用EAGL提供的EAGLContext类 来实现和提供一个呈现环境,用来保持OpenGL ES使用到的硬件状态。 EAGL是一个Objective-C API,提供使OpenGL ES与Core Animation和UIKIT集成的接口。

在调用任何OpenGL ES 功能之前必须首先初始化一个EAGLContext 对象。

每一个IOS应用的每一个线程都有一个当前context,在调用OpenGL ES函数时,使用或改变此context中的状态。

EAGLContext 的类方法setCurrentContext: 用来设置当前线程的当前context。EAGLContext 的类方法currentContext 返回当前线程的当前context。在切换相同线程的两个上下文之前,必须调用glFlush函数来确保先前已提交的命令被提交到图形硬件中。

可以采用不同的方式使用OpenGL ES以便呈现OpenGL ES内容到不同的目标:GLKit和CAEAGLLayer。

为了创建全屏幕的视图或使OpenGL ES内容与UIKit视图集成,可以使用GLKit。在使用GLKit时,GLKit提供的类GLKView类本身实现呈现目标及创建和维护一个framebuffer。

为了使OpenGL ES内容作为一个Core Animation层的部分内容时,可以使用CAEAGLLayer 作为呈现目标,并需要另外创建framebuffer以及自己实现和控制整个绘制流程。

GLKit是一组Objective-C 类,为使用OpenGL ES 提供一个面向对象接口,用来简化OpenGL ES应用的开发。GLKit支持四个3D应用开发的关键领域:

1) GLKView 和GLKViewController类提供一个标准的OpenGL ES视图和相关联的呈现循环。GLKView可以作为OpenGL ES内容的呈现目标,GLKViewController提供内容呈现的控制和动画。视图管理和维护一个framebuffer,应用只需在framebuffer进行绘画即可。

2)GLKTextureLoader 为应用提供从IOS支持的各种图像格式的源自动加载纹理图像到OpenGL ES 图像环境的方式,并能够进行适当的转换,并支持同步和异步加载方式。

3)数学运算库,提供向量、矩阵、四元数的实现和矩阵堆栈操作等OpenGL ES 1.1功能。

4)Effect效果类提供标准的公共着色效果的实现。能够配置效果和相关的顶点数据,然后创建和加载适当的着色器。GLKit 包括三个可配置着色效果类:GLKBaseEffect实现OpenGL ES 1.1规范中的关键的灯光和材料模式, GLKSkyboxEffect提供一个skybox效果的实现, GLKReflectionMapEffect 在GLKBaseEffect基础上包括反射映射支持。

使用GLKView和OpenGL ES进行绘制过程:

1)创建一个GLKView 对象

GLKView 对象可以编程或使用Interface Builder来创建和配置。

在采用编程方式时,首先创建一个context然后调用initWithFrame.:context: 方法。

使用Interface Builder方式时,在从storyboard加载一个GLKView后,创建一个context和设置它作为视图的context属性.

在iOS中GLKit的使用需要创建OpenGL ES 2.0以上的图形环境context。

GLKit视图自动创建和配置它所有的OpenGL ES framebuffer对象和renderbuffers,可以通过修改视图的drawable属性来控制这些对象的属性。

2)绘制OpenGL内容(发布绘制命令)

使用GLKit视图绘制OpenGL内容需要三个子步骤:准备OpenGL ES基础;发布绘制命令;呈现显示内容到Core Animation。 GLKit类本身已经实现了第一个和第三个步骤,用户只需实现第二个步骤,在视图的方法drawRect或视图的代理对象的glkView:drawInRect:中调用适当的OpenGL ES绘制命令进行内容绘制。

GLKViewController类维护一个animation 呈现循环(包含两个方法update和display),用来实现连续的动画复杂的场景。

animation 呈现循环的交替速率由GLKViewController的属性framesPerSecond 指示,并使用preferredFramesPerSecond 属性来修改它。

4、其它图形编程相关API

1)、Core Animation

Core Animation是一套Objective-C API,实现了一个高性能的复合引擎,并提供一个简单易用的编程接口,给用户UI添加平滑运动和动态反馈能力。

Core Animation 是 UIKit实现动画和变换的基础,也负责视图的复合功能。使用Core Animation可以实现定制动画和细粒度的动画控制,创建复杂的、支持动画和变换的layered 2D视图。

Core Animation不属于绘制系统,但它是以硬件复合和操作显示内容的基础设施。这个基础设施的核心是layer对象,用来管理和操作显示内容。在ios 中每一个视图都对应Core Animation的一个层对象,与视图一样,层之间也组织为层关系树。一个层捕获视图内容为一个被图像硬件容易操作的位图。在多数应用中层作为管理视图的方式使用,但也可以创建独立的层到一个层关系树中来显示视图不够支持的显示内容。

OpenGL ES的内容也可以与Core Animation内容进行集成。

为了使用Core Animation实现动画,可以修改层的属性值来触发一个action对象的执行,不同的action对象实现不同的动画。

Core Animation 提供了一下一组应用可以采用的类来提供对不同动画类型的支持:

CAAnimation是一个抽象公共基类,CAAnimation采用CAMediaTiming 和CAAction协议为动画提供时间(如周期、速度、重复次数等)和action行为(启动、停止等)。

CAPropertyAnimation是 CAAnimation的抽象子类,为动画提供一个由一个key路径规定的层属性的支持;

CABasicAnimation 是CAPropertyAnimation的具体子类,为一个层属性提供简单插入能力。

CAKeyframeAnimation也是CAPropertyAnimation的具体子类,提供key帧动画支持。

CATransition是CAAnimation的具体子类,提供影响整个层内容的事物效果。

CAAnimationGroup也是CAAnimation的子类,允许动画对象组合到一起并同时运行。

2)Image I/O

Image I/O 提供读写多数格式图像文件的数据的接口。主要包括图像源CGImageSourceRef和图像目标CGImageDestinationRef两个类。

3)Sprite Kit

Sprite Kit建立于OpenGL ES之上,Sprite Kit使用图形硬件来有效的呈现动画帧,因此可以高帧率地动画和呈现任意的2D纹理图像或游戏sprite,呈现的内容包括sprites、文本、CGPath形状、视频等。

在Sprite Kit中动画和呈现由一个SKView 视图对象执行。游戏的内容组织为以SKScene 对象表现的一个个场景。一个场景包含要呈现的sprites和其它内容,一个场景也实现每个帧关联的逻辑和内容处理。

在同一时刻,一个SKView视图只呈现一个场景,在场景呈现时,场景关联的动画和帧关联的逻辑被自动执行。在切换场景时使用SKTransition 类来执行两个场景间的动画。

4)SceneKit

SceneKit是一个使用3D图形技术实现的Objective-C 框架,包含一个高性能的呈现引擎和一个高级的描述性API。可以利用该框架创建简单的游戏和界面丰富的用户UI,使用SceneKit仅需要使用描述性API描述你的场景的内容(如几何形状、材料、灯光和摄像等)和你想在那些内容上要执行的行动或动画即可。

SceneKit的内容组织为由节点组成的树形结构,称为scene graph。一个场景包含一个根节点,定义场景的坐标空间,其它节点定义场景的可视内容。SceneKit在GPU上呈现每一帧之前在一个视图上显示场景、处理scene graph和执行动画处理。

SceneKit包含的主要类:

SCNView & SCNSceneRenderer:SCNView是显示或呈现SceneKit内容的视图。SCNSceneRenderer是一个协议,定义用于视图的一些重要方法。

SCNScene: 表现一个场景,是所有SceneKit内容的一个容器。场景可以从使用3D著作工具创建的一个文件中加载,也可以编程创建,场景需要在一个视图上显示,

电脑资料

SCNNode:一个场景的基本构造块,表示scene graph树的一个节点。scene graph树定义了场景上节点之间的逻辑结构,通过为一个节点附属geometries、lights、cameras来提供场景的可视内容。

SCNGeometry、SCNLight、SCNCamera:分别是geometries、lights、cameras对应的类。SCNGeometry为场景提供形状、文本或定制顶点数据,SCNLight为场景提供阴影效果,SCNCamera为场景提供可视点。

SCNMaterial:为SCNGeometry对象定义表面外观属性,规定对象表面如何着色或纹理以及如何反应灯光。

SceneKit内容的动画:

SceneKit动画基于Core Animation 框架,可以隐式或显式创建。

隐式创建是实际是通过动画节点的一些动画属性来实现:SceneKit自动在run loop一次运行期间对一个场景包含节点属性的所有改变组合成一个原子操作,称为一个事务,由SCNTransaction 类表示;当设置SCNTransaction类的动画周期不为0时,所有对节点动画属性的改变自动执行动画。

如下代码片段所示:

func fallAndFade(sender: a href=“” AnyObject /a ) {SCNTransaction.setAnimationDuration(1.0)textNode.position = SCNVector3(x: 0.0, y: -10.0, z: 0.0)textNode.opacity = 0.0 }

显式创建动画时,可以选择CAAnimation一种类型的子类来创建特定类型的动画。使用key-value为动画规定属性及设置动画参数,然后把创建的动画附属到场景的一个或多个元素。可以使用不同的Core Animation动画类组合或序列化几个动画或创建动画在几个 keyframe值之间插入属性值。

如下代码片段为显式创建动画的例子:

let animation = CABasicAnimation(keyPath: “geometry.extrusionDepth”) animation.fromValue = 0.0 animation.toValue = 100.0 animation.duration = 1.0 animation.autoreverses = true animation.repeatCount = Float.infinity textNode.addAnimation(animation, forKey: “extrude“)

SceneKit也支持使用SCNSceneSource 类从一个场景文件中加载CAAnimation动画对象,然后附属它到SCNNode对象。

5)Metal

Metal框架是一个OpenGL ES类似的底层API,为GPU加速的先进的3D图形呈现或数据并行计算任务提供支持。Metal负责和3D绘图硬件交互,为图形和计算命令的组织、处理、提交和相关资源和数据的管理提供一个细粒度的、底层的支持流式计算的现代API。Metal的目标是在执行GPU任务时尽量减少CPU的负载,消除在GPU执行图形和数据并行计算操作时的性能瓶颈,能够有效的使用多线程并行创建和提交命令到GPU。

Metal也提供了一个映射编程语言用来编写能够被Metal应用使用的图形映射或计算函数。Metal 映射语言编写的代码能够在编译时与应用代码一起被编译,然后在运行时被加载到GPU上执行;也支持运行时对Metal 映射语言代码进行编辑。

在Metal架构中包括如下几个重要的类或协议:

1、MTLDevice协议和对象

一个MTLDevice代表一个执行命令的GPU设备,MTLDevice协议为其定义了相关接口,包括查询设备能力属性和创建其它设备特定的对象等接口,例如创建命令队列、从内存中分配缓冲区以及创建纹理等。

应用通过调用MTLCreateSystemDefaultDevice 函数来获取一个系统能够使用的MTLDevice对象。

2、命令和命令编码器

在Metal框架中,3D图形呈现命令、计算命令和blitting命令在提交到特定设备GPU上执行前必须进行相应的格式编码,以便能够被GPU识别和执行。

Metal框架为每种命令提供了一种编码器协议:

MTLRenderCommandEncoder 协议:提供接口用来编码一个单次循环呈现期间要执行的3D图形呈现命令。MTLRenderCommandEncoder 对象用来代表一次图形呈现流程的呈现状态和绘制命令。

MTLComputeCommandEncoder协议:提供接口用来编码数据并行计算任务。

MTLBlitCommandEncoder协议:提供接口用来编码在缓冲和纹理之间的简单拷贝操作。

在同一时刻,仅能有一个命令编码器激活来添加命令到一个命令缓冲空间上,即每一个命令编码器必须在另一个使用相同命令缓冲空间的命令编码器创建前结束。

Metal为了支持多个不同任务的并行执行,提供了一个MTLParallelRenderCommandEncoder协议来支持多个MTLBlitCommandEncoder在不同线程同时运行提交不同的命令缓冲到同一个命令缓冲空间。每一个线程有一个它自己的命令缓冲对象,在同一时刻,该缓冲对象只能被该线程的一个命令编码器存取。

MTLParallelRenderCommandEncoder对象允许一次呈现循环的命令编码分解到多个命令编码器进行编码,使用多线程进行并行处理来提高处理效率。

一个命令编码器对象调用endEncoding 方法来结束。

命令编码器对象的创建:

命令编码器对象由MTLCommandBuffer对象负责创建。MTLCommandBuffer协议定义了如下方法用来创建相应类型的命令编码器对象:

renderCommandEncoderWithDescriptor: 为执行图形呈现任务创建一个MTLRenderCommandEncoder 对象。方法的参数MTLRenderPassDescriptor表现一个编码呈现命令的目标(是一个附属点的集合,最多可以包括四个颜色点数据附属点、一个深度点数据附属点、一个图案点数据附属点),在MTLRenderPassDescriptor对象的附属点属性中指定要呈现的图形目标。

computeCommandEncoder方法为数据并行计算任务创建一个MTLComputeCommandEncoder 对象。

blitCommandEncoder 方法为内存Blit操作和纹理填充操及mipmaps的产生等操作创建一个MTLBlitCommandEncoder 对象。

parallelRenderCommandEncoderWithDescriptor: 方法创建一个MTLParallelRenderCommandEncoder对象。呈现目标由 参数MTLRenderPassDescriptor规定。

3、命令缓冲MTLCommandBuffer对象及协议

在经过命令编码器编码后的命令被命令编码器添加到一个称为命令缓冲的MTLCommandBuffer对象上,然后该CommandBuffer对象被提交到GPU来执行其中包含的命令。

MTLCommandBuffer协议为CommandBuffer对象定义接口以及提供命令编码器的创建、提交CommandBuffer到一个命令队列以及检查状态等操作方法。

一个CommandBuffer对象包含打算在特定设备(GPU)上执行的被编码的命令。一旦所有的编码完成,CommandBuffer本身必须提交到一个命令队列,并标记命令缓冲为准备好状态,以便能够被GPU 执行。

在标准标准应用中,通常一个呈现帧的呈现命令使用一个线程被编码进一个命令缓冲中。

MTLCommandBuffer对象的创建和相应方法:

一个MTLCommandBuffer对象由MTLCommandQueue的commandBuffer方法或commandBufferWithUnretainedReferences方法创建。

一个MTLCommandBuffer对象仅能提交到创建它的MTLCommandQueue 对象中。

一个MTLCommandBuffer对象还实现协议定义的如下方法:

enqueue方法用来在命令队列中为该命令缓冲保留一个位置。

commit 方法使MTLCommandBuffer对象被提交执行。

addScheduledHandler:方法用来为一个命令缓冲对象登记一个在该命令缓冲被调度时被调用的代码执行块。可以为一个命令缓冲对象登记多个调度执行块。

waitUntilScheduled 方法等待命令缓冲被调度及在为该命令缓冲登记的所有调度执行块已经执行完。

addCompletedHandler:方法为一个命令缓冲对象登记一个在设备已经执行完该命令缓冲后被调用的代码执行块。也可以为一个命令缓冲对象登记多个完成执行代码块。

waitUntilCompleted 方法等待命令缓冲中命令被设备执行完和为该命令缓冲登记的所有完成执行块都执行结束。

presentDrawable:方法用来在命令缓冲对象被调度时呈现一个可显示资源(CAMetalDrawable 对象)的内容。

4、MTLCommandQueue协议和命令队列对象

MTLCommandQueue协议为包含命令缓冲的一个队列。命令队列用来组织其中包含的命令缓冲对象的执行次序和控制命令队列中的命令缓冲对象包含的命令什么时候被执行。

MTLCommandQueue协议为命令队列定义了接口,主要的接口包括命令缓冲对象的创建。

MTLCommandQueue对象的创建:

使用MTLDevice对象的newCommandQueue方法或newCommandQueueWithMaxCommandBufferCount:方法来创建一个命令队列对象。

下图为以上这些对象之间的关系图:

如图中所示:必须为一个呈现命令编码器设置呈现相关的状态、设置和创建相关的呈现用到的缓冲区、纹理等Metal资源对象。

为呈现命令编码器指定的状态包括一个呈现管道流水线状态(Render Pipeline State),一个深度和图案状态(Depth Stencil State),一个采样状态(Sampler State)。

一个Blit命令编码器与一个缓冲区和一个纹理关联,用来在两者之间进行Blit操作。

命令编码器指定图形或计算功能时可以分配三种类型的MTLResource Metal资源对象使用:

MTLBuffer 表现一个能够包含任意类型数据的无格式内存。MTLBuffer通常用于多边形顶点vertex、着色器shader及计算状态数据。

MTLTexture表现一个有着特定纹理类型和点格式的具有相应格式的图像数据。纹理对象可以作为多边形顶点vertex、片段fragment或计算功能的一个源,也可以在呈现描述符中作为图形呈现的输出目标。

MTLSamplerState对象当一个图形或计算功能在一个MTLTexture上执行纹理采样操作时使用,用来定义地址、过滤和其它属性。

图形呈现编码器MTLRenderCommandEncoder 可以使用setVertex*及setFragment* 方法组作为其参数来为相应的映射函数分配一个或多个资源。

5、CAMetalLayer 对象和CAMetalDrawable 协议

Core Animation定义了一个CAMetalLayer类和一个CAMetalDrawable 协议用来提供一个Metal内容呈现的层后备视图。CAMetalLayer对象包含有关要呈现内容的位置、尺寸、可视属性(背景颜色、边界和阴影)及Metal呈现内容使用到的资源等。CAMetalDrawable 协议是MTLDrawable 的扩展,指定了可显示资源对象要符合的MTLTexture协议,使可显示资源对象可用作呈现命令的目标。

为了实现Metal内容在一个CAMetalLayer对象的呈现,应为每次呈现流程创建一个CAMetalDrawable对象,从中得到它包含的MTLTexture 对象,然后在呈现流水线描述MTLRenderPipelineDescriptor 的颜色附属点属性中使用,指定其为图形呈现命令的目标。

一个CAMetalLayer对象调用CAMetalLayer 对象的nextDrawable 方法来创建。

在创建一个可显示资源作为图形命令的目标后,就可以调用如下步骤完成图形的绘制。

1)、首先创建一个MTLCommandQueue 对象,然后使用它创建一个MTLCommandBuffer对象;

2)、创建一个MTLRenderPassDescriptor对象,为其规定用作图形缓冲中的编码呈现命令目标的附属点集合;然后使用这个MTLRenderPassDescriptor 对象创建一个MTLRenderCommandEncoder对象;

3) 创建相应的Metal资源对象,来存储绘制用到资源数据,如顶点坐标和顶点颜色数据;并调用MTLRenderCommandEncoder的setVertex*:offset:atIndex: 和setFragment* :offset:atIndex:方法来为呈现编码器指定用到的资源;

4) 创建一个MTLRenderPipelineDescriptor 对象并为其指定vertexFunction和fragmentFunction 属性,这些属性使用Metal映射语言代码中读取的相应映射函数MTLFunction对象来设置。

5)使用MTLDevice的newRenderPipelineStateWithDescriptor:error:方法或类似方法并根据MTLRenderPipelineDescriptor创建一个MTLRenderPipelineState对象;然后调用MTLRenderCommandEncoder 的setRenderPipelineState: 方法来为呈现编码器对象MTLRenderCommandEncoder设置管道流水线;

上一篇:孙村镇农户危房改造承诺书下一篇:宝马集团太和培训基地成立