第一篇:ios毕业论文
河南理工大学毕业设计(论文)说明书
摘 要
随着计算机网络通信技术和Internet的飞速发展,基于因特网的手机移动应用已经开始成为一种全新的功能需求,并且越来越受到人们的关注。由于移动应用具有简单性,随时随地性等诸多特点,因此它有着传统计算机所无法比拟的优点。这样一来,手机移动应用的开发工作就显得尤为重要,开发出一个集合手机应用的“商店”极为重要,近年来iphone手机在中的发展趋势日趋上升,iphone手机保密性很强,很多东西都不对外开放,爱限免手机app就是针对iphone手机而开发的一款手机应用,日趋扩大的市场也使得应用于iphone手机的app开发日趋紧迫,可以说爱限免的开发不仅是客户的需求更是市场的需求。
爱限免项目的开发使用了iphone自己研发的开发软件xcode6.0,主要有UIkit框架和Foundation框架组成。爱限免的项目开发,对数据进行展示主要应用列表控制器UIableview,在使用UItableview是对cell的复用是此技术的难点,主要避免在cell复用是出现内存泄露状况而导致的程序崩溃,数据的获取应用了AFHttpNetWork第三方库,对网络数据进行get获取,把获取的数据用数据模型接收,这样有利于降低耦合性,是程序更顺畅。在对数据保存时用到了FMDB第三方数据库,此数据库的底层也是对squlite的封装,是开发者应用起来更顺手简介,提高效率,界面之间的数据传输难点blcok的应用,这点要求开发者对block有比较深刻的理解,以及应用熟练度。关键词:ios,squlite,block,应用,控件
I
河南理工大学毕业设计(论文)说明书
Abstract
With the rapid development of computer network communication technology and the Internet, based on Internet mobile phone application has begun to become a kind of new functional requirements, and people have paid more and more attention.Because of its simplicity, anytime, anywhere, etc., it has the advantages that the traditional computer can't match..In this way, the mobile application development work is particularly important, the development of a collection of mobile application store “is very important, in recent years the iPhone in the development trend is rising day by day, iPhone mobile phone security is very strong, a lot of things are not open to the public, love limit free mobile app is for the iPhone and the development of a mobile application, widening the market also make the application to iPhone app development is becoming more and more urgent, you can love limit free development is not only the needs of customers is the demand of the market
The development of love limited free project use of iPhone own R & D software xcode6.0, mainly UIkit framework and Foundation framework.Love free for a limited time of project development, the data for display of the main application list controller UIableview, in the use of UItableview is reuse of the cell is the difficulty of this technology, mainly to avoid memory leak condition, which leads to the program crashes in the cell multiplexing and data acquisition application the AFHttpNetWork third-party libraries, the network data to get access to, to get the data model data receiving, which help to reduce coupling is process smoother.In to save the data used in the FMDB database of the third party, the bottom of this database is to squlite package is more comfortable profile application developers, improve efficiency, application of interface between data transmission difficulties blcok, this requires developers to more profound understanding of block, as well as the application of proficiency Keywords: IOS, squlite, block, application, control II
河南理工大学毕业设计(论文)说明书
目 录
摘 要............................................................I 第一章 前 言.....................................................1
1.1 课题开发背景................................................1 1.2 爱限免手机app框架设计开发的现实意义........................2 1.3 国内外研究状况..............................................2 1.4 论文内容和结构..............................................3 第2章 爱限免手机应用开发技术简介.................................5
2.1 Objective-c简介.............................................5 2.1.1 ios系统框架...........................................6 2.1.2核心操作系统层和核心服务层.............................7 2.1.3应用程序框架...........................................8 2.2 SQLite数据库介绍............................................9 2.3 XCode......................................................10 第3章 爱限免手机应用app需求分析................................11
3.1 爱限免手机应用app的可行性分析.............................11 3.2 爱限免手机应用app功能需求分析.............................13 3.2.1 功能需求..............................................14 第4章 爱限免手机应用app设计....................................16
4.1 模块功能设计...............................................16 4.1.1 限免模块..............................................16 4.2.1 免费模块..............................................21 4.2.2 专题模块..............................................26 4.2.3 分享功能模块..........................................30 4.2.4 收藏功能模块..........................................32 4.2.5 搜索功能模块..........................................36 第5章 系统测试..................................................38
5.1 功能模块测试...............................................38 5.2 功能整体测试...............................................39 总结与展望.......................................................40
总结...........................................................40
III
河南理工大学毕业设计(论文)说明书
展望...........................................................41 参考文献.........................................................43 谢 辞...........................................................44
IV
河南理工大学毕业设计(论文)说明书
第一章 前 言
1.1 课题开发背景
如今移动开发产业让人眼花缭乱,主要的开饭平台有:iOS(iPhoneOS)、Android、Nokia Symbian、BlackBerry、Java ME、Windows Phone、Flash/Flash Lite、mobile web(WAP/XHTML/CSS/Javascript)。Android以其开放性,多任务,大功能,画面流畅,硬件设备优良多样等各种优点,占智能机一大部分;然而它也存在着很明显的不足,如:兼容性差,各种机型的配置不一样,以至于开发的时候出现各种版本。有些产品华而不实,用户体验差。Symbian主要基于C语言的应用开发,支持多线程运行模式,但是开发代码量过大给开发人员造成很大的不便,另外塞班版本之间兼容性差也是SymbianOS需要改进的一个地方。就目前而言,三大平台(Android、Symbian、BlackBerry)的市场占有率也在逐渐下降,iOS呈现平稳上升趋势。
1.App Store的支付模式成熟
App Store的成熟不仅仅是商业模式的创新,更重要的是无法模仿,经过长时间的运营,App Store已经形成完备的支付模式,被大部分用户接受。
2.iOS是用Objective-C开发
从全球的编程语言排行榜来看,虽然,Objective-C只有苹果公司一家使用,但是已经排名第4,可见iOS开发的普及性和受欢迎程度,另外,objective-c是对c语言的封装,既没有了c语言写程序的繁琐复杂性,又兼顾了c语言的高效率,这也使得objective-c语言在编程语言中的地位以及受欢迎度日益上升的一个因素。
3.Iphone性能优越
苹果iPhone以及所有苹果的硬件软件策略和控制让苹果在用户体验和控制产品质量方面占尽先机,大部分iOS用户能够同时对他们手中的设备进行更新,这会吸引更多用户。
4.iPhone在中国极受欢迎
中国的各大移动运营商都积极地与苹果公司合作,各自推出适合中国人使用的手机套餐和应用,比如中国联通,中国电信等等,社会各界也对iPhone有很好的评价,还有很多知名手机应用软件,如qq微信等也加入了app store。
5.iOS在各国开发者中有很好的学习氛围
如facebook的three 20 iOS开源代码库,都是良好的学习资源,还有一些
河南理工大学毕业设计(论文)说明书
前辈大牛发表的博客如博客园就是一个ios开发者很好的交流网站,还有一些如cocoachina里边集合了很多开发者的心得及项目,国内外的开发大牛都有在上边发表自己的心得。也是ios开发者良好的学习资源。
1.2 爱限免手机app框架设计开发的现实意义
随着科技的发展技术的进步,手机的功能也出现了翻天覆地的变化,由原来只是打电话发短信的基本功能,转变为现在的全功能智能手机,人们对手机的要求也越来越高。
1.iphone手机中国市场无限扩大
Iphone手机的性能优越已经不言而喻,不用就释放也使得iphone手机避免了安卓手机卡机现象,然而iphone手机并不对外开源,是的其核心技术只被苹果公司垄断,关于iphone手机的手机应用也是少之又少,毕竟开发者有限。因此iphone手机的app开发也是迫切的。
2.开发框架完善
Iphone应用的开发主要平台式有iphone公司自己研发的开发平台xcode,是由苹果公司的先辈大牛写出来的,主要用于ios开发者开发软件,集合objective-c,性能比较完善。
3.满足市场
Iphone主要软件获取是从appStore中买或者是免费下载,爱限免主要实现对iphone手机应用的时时推荐,把app进行条理分类,便于用户根据个人需求获取自己想要得到的app。
1.3 国内外研究状况
1.国外
第一代iPhone在2007年诞生虽然现在也许很难想象,但是当第一代iPhone发布的时候,它相对来说落后的特性和功能是不足以让它直接在纸面的参数对比上胜过竞争对手的。当时的Windows Mobile, Palm OS, Symbian, 甚至是BlackBerry都是2007年间相对成熟的系统了,都拥有广泛而又深厚的特性积累。相比之下,iPhone不支持3G网络,不支持多任务操作,也不支持第三方应用。你没有办法去复制/粘贴文本,你没有办法在想要发送的电子邮件中添加附件。就连彩信iPhone也没有办法提供支持。其他方面的特性缺失还包括:Exchange邮件推送、可自定义的主屏幕、tethering、可见的全局文件管理器、Office文件编辑、语音拨号、以及对黑客和开发者所理应由的开放性,iphone发布三个 2
河南理工大学毕业设计(论文)说明书
月之后就迎来了第一次升级,引入了iTunes Wi-Fi MusicStore。它允许用户直接在iPhone上面购买音乐,它或许是许许多多iPhone新特性中因为运营商网络压力或者运营利益而遭到压制的例子中的第一个,在随之而来的ios2解决了手机应用问题加入了appstore,App Store同时存在于手机(AppStore应用)和PC(iTunes)两个地方,用户选择任意一种途径都可以自由地浏览和安装应用程序。这对于过去分散性极高的移动应用(大部分通过web直接下载,有些应用存在于第三方应用商店,整体和OS的整合度较差)来说是一个巨大的变化。另外重要的是,AppStore和iTunesMusic使用一个账号,用户无需再次输入自己的信用卡账号密码。这意味着查找和安装应用程序将前所未有的容易,这大大提高了用户冲动消费的可能性,在之后的升级中也加入了自己原创的地图的一些高级功能。2.国内
随着智能手机的大众化,越来越多的人应用智能手机。相对的对手机软件的需求也就越来越多。当今时代手机不再只是用来打电话、发短信的工具,反而对手机的娱乐功能要求越来越高。手机新闻也成为了人们的主要获取信息途径之一。目前中国新闻行业已经具备了相当的规模,并在国际市场上已有一定的竞争力。苹果手机作为当今中国智能手机市场上不可或缺的一个品牌,基于iOS的手机软件需求量也就相应的越来越强。市场上的新闻品牌繁多,定位不一,基本满足了各层次消费者的需求,例如:腾讯新闻、搜狐新闻、网易新闻、新浪新闻等等这些大家所熟知的新闻已经在苹果软件中占据了一定的地位。智能手机的普及使得移动信息平台成为了主流。伴随着苹果手机进入中国市场,相应的iOS技术逐渐流行起来。而对于开发苹果应用的语言Objective-C,也成为当今社会最流行的开发语言,并且保持着强劲的上升趋势,隐隐有超过C语言的现象。对于其他的开发语言,例如java、javascripe,Object-C以其强大的优势遥遥领先于这些其他的编程语言。本人根据当前的形式,决定引用这种这种技术来开发手机应用。
1.4 论文内容和结构
本论文主要写的是一个ios项目-爱限免的实现过程,以及一些在实现过程中遇到的难题,解决方法,自己在解决问题中的体悟和感受,以及对以后项目的完善的展望,本文把实现项目过程中的核心代码张是给读者看,让读者对我的项目有初步的了解,也对关键代码附有文字说明以及代码运行后的图片展示。具体 3
河南理工大学毕业设计(论文)说明书
章节内容如下简介讲述:
第一章,介绍了课题的开发背景、课题开发的现实意义、国内外研究综述、论文内容及结构。
第二章,概略地介绍了开发爱限免手机应用多用到的各种技术,比如新技术Objective-c,SQLite数据库,开源框架的json解析等。
第三章,对爱限免系统结构设计、系统结构功能、运行环境等概要分析设计阶段做工了大体介绍即需求分析。
第四章,对系统总体流程设计、系统整体框架、后台逻辑处理功能设计和数据库设计作了简要说明具体介绍了系统各功能实现过程,如分享、收藏等。
第五章,大体介绍了对本系统的测试工作,涵盖了测试计划、测试结果以及测试分析这三个方面的内容。
河南理工大学毕业设计(论文)说明书
第2章 爱限免手机应用开发技术简介
该部分主要包括对iOS系统架构的分析、核心操作系统的分析、应用程序框架的分析、内核的分析、开发环境的配置信息、选用数据库描述信息等,具体如下:
2.1 Objective-c简介
Objective-C是非常“实际”的语言。它使用一个用C写成、很吊的运行库,只会令应用程序的占得内存增加很小。OC写成的程序通常不会比其源代码大很多。而其函数库(通常附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。Objective-C的最初版本并不支持垃圾回收。在当时这是争论的焦点之一,很多人考虑到Smalltalk回收时有漫长的“死亡时间”,令整个系统失去功用。Objective-C为避免此问题才不拥有这个功能。虽然某些第三方版本已经加入这个功能(尤其是GNUstep),再起Mac OS X 10.3中仍未引入这个功能。不过令人欣慰的是在Apple发布的XCode4中已经支持自动释放,我不敢冒昧的说那是垃圾回收,因为两者机制不同,在xCode4中的自动释放,也就是ARC(Automatic Reference Counting)机制,是不需要用户手动去Release一个对象,而是在编译期间,编译器会自动帮你添加那些以前你经常写[NSObject release]。
另一个问题是OC不包括命名空间机制(namespace mechanism)。取而代之的是程序设计师必须在其类别名称加上前缀,时常引致冲突。在2004年,在Cocoa编程环境中,所有Mac OS X类别和函式均有“NS”作为前缀,例如NSobject或NSButton来清楚分别它们属于Mac OS X核心;使用“NS”是由于这些类别的名称在NeXTSTEP开发时定下。虽然Objective-C是C的母集,但它也不是C的基本型别为第一级的对象。和C++不同,Objective-C不支援运算子多载(它不支持ad-hoc多型)。亦与C++不同,但和Java相同,Objective-C只容许对象继承一个类别(不设多重继承)。Categories和protocols不但可以提供很多多重继承的好处,而且没有很多缺点,例如额外执行时间过重和二进制不兼容。由于OC使用动态运行时类型,而且所有的方法都是函数调用(有时甚至连系统调用(syscalls)也如此),很多常见的编译时性能优化方法都不能应用于OC(例如:内联函数、常数传播、交互式优化、纯量取代与聚集等)。这使得OC性能劣于类似的对象抽象语言(如C++)。不过OC拥护者认为既然OC运行时消耗较大,OC本来就不应应用于C++或Java常见的底层抽象
河南理工大学毕业设计(论文)说明书
2.1.1 ios系统
Cisco的网际操作系统(IOS)是一个为网际互连优化的操作系统--类似一个局域操作系统(NOS)、如Novell的 NetWare,为LANs而进行优化。IOS为长时间有效地维护一个互联网络提供了统一的规则。简而言之,它是一个与硬件分离的软件体系结构,随网络技术的不断发展,可动态地升级以适应不断变化的技术
IOS可以被视作一个网际互连中枢。一个高度智能的管理员,负责管理、控制复杂的分布式网络资源。其早期版本是一个单独系统,基本上以路由器为中心。它被排列成一个过程(Procedure)集,允许任何过程之间相互呼叫。这种单一的结构使数据的隐蔽性和独立性不强。它的大多数操作代码拥有结构和操作的相关性
iPHONE是Mac出的封闭手机系统,iPhone相对要稳定,不开放源代码的,扩展相对不足,移植性很好!iPhone开发用的是Objective-C(一种C语言的第三方拓展版),从众面小,不能定制UI(界面),只能进行功能解锁 比如:越狱.iPhone定位于高端手机市场,走的是个性化路线,主要优势是AppStore(移动网上商店),Mac拥有全球最大最成熟的移动网上商店
1.模块性
IOS是Cisco路由软件的初始品牌名称。随着Cisco技术的发展,IOS不断扩展,成为Cisco Central ENgineering(中央工程部门)所称之为的“一系列紧密连接的网际互连软件产品”。尽管在其品牌名识别中,IOS可能仍然等同于路由软件,但是它的持续发展发已使之过渡到支持局域网和ATM交换机,并为网络管理应用提供重要的代理功能。必须强调的是,IOS是Cisco开发的技术:一项企业资产。它给公司提供独特的市场竞争优势。许多竞争者许可IOS在其集线器和中由模块内运行,IOS已尼广泛成为网际互连软件事实上的工业标准。
2.灵活性
基于Cisco产品的工程开发以用户可以获得适应变化的灵活性。IOS软件提供一个可扩展的平台,Cisco会随着需求和技术的发展集成新的功能。Cisco可以更快地将新产品投向市场,我们的客户可以享用这种优势。
3.可伸缩性
IOS遍布网际互连市场;广泛的Cisco使用伙伴及竞争者在他们的产品上支 6
河南理工大学毕业设计(论文)说明书
持IOS.IOS软件体系结构还允许其集成构造企业互联网络的所有部分。Cisco已经定义了4个:核心/中枢:网络中枢和WAN服务,包括大型骨干网络路由器和ATM交换机。工作组:从共享型局域网移植到局域网交换(VLANs)提供更优的网络分段和性能。)远程访问:远程局域网连接解决方案;边际路由器、调制解调器等。IBM网际互连:SNA和LAN并行集成,从SNA转换到IP.Cisco的IOS扩展了所有这些领域,提供了支持端到端网际互连的稳健性。
4.可操作性
IOS提供最广泛的基于标准的物理和逻辑协议接口——超过业界任何其他供应商:从双绞线到光纤,从局域网到园区网到广域网,Novell NetWare,UNIX,SNA以及其他许多接口。即是说,一个围绕IOS建立的网络将支持非常广泛的应用。
2.1.2核心操作系统层和核心服务层
位于iOS系统架构最下面的一层是核心操作层,它包括内存管理,文件管理,电源管理以及一些其他的操作系统业务,它可以直接和硬件设备交互。核心操作系统层包括以下这些组件:OS X Kernel,Mach 3.0,BSD,Sockets,Power Mgmt,File System Keychain,Certificates,Security,Bonjour等
开发人员也可以完全访问核心服务层来方问iOS的一些服务,包括数据库连接,URL学习等等,它主要包括以下这些组件:Collections,Address Book,Networking,File Access,SQLite,Core Location,Net Services,Threading,Preferences,URL Utilities等。
SQLite是嵌入式的和轻量级的sql数据库,广泛用于iOS应用。iOS系统内置SQLite数据库减小了开发人员的负担,是系统的一部分。
Net Servicer主要负责网络服务,在开发过程中,承担应用程序与服务器之间连接的角色,有很强的交互性。
媒体层,通过它可以在应用程序中使用各种媒体文件,进行音频与视频的录制,图形的绘制,以及制作基础的动画效果。它包括以下这些组件:Core Audio,OpenGL,Audo Mixing,AudioRecording,VideoPlayback,JPG,PBG,TIFF,PDF,Quartz,CoreAnimation,OpenGL ES。最上面一层是可触摸层,这一层为应用开发提供了各种有用的框架,并且大部分与用户界面有关,本质上来说它负责用户在iOS设备上的触摸交互操作。它包括以下这些组件:Multi-Touch Events,Core Motion,Camera,View Hierarchy,Localization,Alerts,Web Views,Image 7
河南理工大学毕业设计(论文)说明书
Picker,Multi-Touch Controls。
在Cocoa Touch层中的很多技术都是基于Objective-C语言的。Objective-C语言为iOS提供了相机集合,文件管理,网络操作等支持。例如UIKit框架,它为应用程序提供了各种可视化组件,窗口(window),视图(view)和按钮组件(UIButton)。Cocoa Touch层中的其他框架,对我们在应用程序中的开发来说也是非常有用的,如访问用户通信录功能框架,获取照片信息功能的框架,负责加速感应器和三维陀螺仪等硬件支持的框架等等。
2.1.3应用程序框架
编写应用程序项目,都是从CocoaTouch层开始的,具体来说是从UIKit Framework开始的。iOS常用的SDK框架如下:
AddressBook.framework 提供访问存储核心数据库中用户联系人信息的功能。
AddressBook.framework提供一个用户界面,用于显示存储在地址薄中的联系人详情。
AudioUnit.framework提供一个接口,让我们的应用程序可以对音频进行处理。
AudioToolbox.framework和AVFoundation.framework提供音频录制和回放的底层API,同时也负责管理音频硬件。
CFNetwork.framework访问和配置网络,像HTTP,FTP和Bonjour Services等。
CoreFoundation.framework提供抽象的常用数据类型,如Unicode、strings、XML、URL等。
CoreGraphics.framework提供2D绘制的基于C的API。
Foundation.framework提供Object-C的基础类(像NSObject)、基本数据类型和操作系统服务等。
GameKit.framework为游戏提供网络功能,点对点互联和游戏中的语音交流。MapKit.framework为应用程序提供内嵌地图的接口。MediaPlayer.framework提供视频播放和音频的功能。
MessageUI.framework提供视图控制接口用以处理E-mail和短信。OpenGLES.framework提供简洁而高效的绘制2D和3D图形的OpenGL API。QuartzCore.framework提供动画特效以及通过硬件进行渲染的能力。
河南理工大学毕业设计(论文)说明书
StoreKit.framework为应用程序提供在程序运行中消费的支持。SystemConfiguration.framework检测当前网络是否可用和硬件设备状态的能力。
2.2 SQLite数据库介绍
SQLite是一个轻量级、跨平台的关系型数据库。既然号称关系型数据库,支持SQL92标准中常用的事务(比如视图、事务、触发器等)就是理所当然的了,具体特色有以下几点:
1.轻量级
先说它的第一个特色:轻量级。想必SQLite的创建者很看重这个特性,连它的Logo都是用的“羽毛”,来显摆它的轻飘飘。SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态 库,就可以享受它的全部功能。而且那个动态库的尺寸也挺小,以版本3.6.11为例,Windows下487KB、Linux下347KB等。
2.绿色软件
SQLite的另外一个特点是绿色:它的核心引擎本身不依赖第三方的软件,使用它也不需要“安装”。所以在部署的时候能够省去不少麻烦。
3.单一文件
所谓的“单一文件”,就是数据库中所有的信息(比如表、视图、触发器、等)都包含在一个文件内。这个文件可以copy到其它目录或其它机器上,也照用不误。
4.跨平台/可移植性
如果光支持主流操作系统,那就没啥好吹嘘的了。除了主流操作系统,SQLite还支持了很多冷门的操作系统。我个人比较感兴趣的是它对很多嵌入式系统(比如Android、Windows Mobile、Symbin、Palm、VxWorks等)的支持。
5.内存数据库(in-memory database)
SQLite的API不区分当前操作的数据库是在内存还是在文件(对于存储介质是透明的)。所以如果你觉得磁盘I/O有可能成为瓶颈的话,可以考虑切换为内存方式。切换的时候,操作SQLite的代码基本不用大改,只要在开始时把文件Load到内存,结束时把内存的数据库Dump回文件就OK了。
河南理工大学毕业设计(论文)说明书
2.3 XCode Xcode2.0是开发人员建立Mac OS X应用程序的最快捷方式,也是利用新的苹果电脑公司技术的最简单的途径。Xcode2.0将Mac OSX的轻松使用,UNIX 能量以及高性能的开发技术集合在一起。
不管你用C、C++、Objective-C或 Java编写程序,在AppleScript里编写脚本,还是试图从另一个奇妙的工具中转移编码,你会发现Xcode编译速度极快。每次操作都很快速和轻松。
Xcode4的虚拟模型和设计功能让你可以更轻松的开发和维护应用程序。只需选择应用程序中想要编写的部分,然后模型和设计系统将自动创建分类图表,不仅可以显示编码,还可以让你进行浏览。Mac OS X Core Data API 帮你的应用程序创建数据结构。更棒的是,它还自动提供撤消、重做和保存功能,无需编写任何编码。
Xcode整合的 Apple Reference Library为所有的Apple开发者文件提供一个单独的搜索和显示界面,这些文件包括来自苹果电脑公司网站的在线文件,以及存放在你电脑上的文件。新的参考资料库甚至可以帮你将定期更新资料下载到你的电脑,保持文件的最新状态。Xcode 将帮你快速找到最新的答案。
Xcode4的核心部分是苹果电脑公司下一代业界标准的gcc编译器gcc4.0。新的编译器利用许多先进的最优化技术帮你从现存编码中获得更多性能。从超级计算世界借鉴来的自动向量化(Auto-vectorization)技术可以帮助你释放每台 Intel 系统中速度引擎的能量,而不需要编写向量化编码。其他的最优化工具则支持反馈定向的最优化,以及隐藏模块分析。
Xcode 将赋予你创建诸如计算和渲染引擎应用程序的能力,这些应用程序使用64位内存定址。这非常适合数据集中的应用程序,其通过访问内存中的数据运行速度更快,远胜于磁盘访问。Xcode将为你提供工具来建立并调试适合 IntelCore i5, i7 和Mac OSX Lion的32或64位应用程序,还可以让你创建包含32位和64位执行能力的 Fat Binaries。
众所周知,在构建中引进多重处理器可以提高速度,Xcode 能帮你实现这个明显的结论。利用支持 Rendezvous 的分布式构建功能,可以轻易地把编译工作量分散到闲置的电脑上来寄放构建,或者更好是在单独的电脑上开发一个专门的 Xserve 构建寄放区,快速处理那些耗时的任务。
河南理工大学毕业设计(论文)说明书
第3章 爱限免手机应用app需求分析
根据第一章所定义的课题研究方向及目标,本章将对系统功能进行具体的需求分析,具体分析爱限免app所要实现的功能以及欲达到的效果,具体内容如下章节:
3.1 爱限免手机应用app的可行性分析
1.使用objective-c编程技术
Objective-c是非常实际的语言,他是一个用c写成、很小的运行库,只会令程序的尺寸增加很小,和大部分oo系统使用极大的vm执行时间会取代整个系统运作相反,Objective-c写的程序通常不会比起原始代码大很多,而其函数库亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反,因objective-c它完全兼容标准c语言,c语言具有的高效性也被objective-c继承,但是我们用的objective-c并不像c语言用起来那么的复杂,因为它是对c的封装,把复杂高效的语言变得简单高效,这样更利于ios开发者使用,也为iOS开发者带来了便捷。(1)动态绑定
函数和消息的最根本不同是:函数和它的参数是在编译的时候已经确定下来,但是消息和接收对象知道程序已经在运行,消息在传递时才能确定下来。确切的消息方法实现依赖于消息的接收者,不同的接收者可能有相同的方法名不同的方法实现,只有在消息接收时才能确定(动态类型),通过源代码的类型定义并不能完全确认接收者的类型。运行时消息例程查找接收者和消息方法,找到消息方法实现的机器码,呼叫这个方法,传递给它消息实例变量指针(2)多态性
在Objective-c中消息的调用看上去和标准C中的函数调用相似,但因为方法属于一个对象,消息的行为与函数调用还是不同。在一些情况下,一些对象仅能对针对它涉及的方法起作用,不能被其他类的方法使用,即使这些类有同样名称的方法。这意味着两个对象对同样的消息有着不同的响应,即多态性。Objective-c中多态性和动态绑定配合使用,可以使代码提供给任意数量不同类型的对象使用,这些对象不需要再写代码的时候就已经定义好,它们可以是以后开发的对象,也可以是其他项目的对象。(3)面向对象
面向对象程序构建在多种对象之上,基于Cocoa框架的程序可能使用
河南理工大学毕业设计(论文)说明书
NSMatrix对象、NSWindow对象、NSDirectonary对象、NSFont对象以及许多其它对象。在Objective-c中通过定义类来定义对象。面向对象让开发者更容易开发应用程序软件,以及更加规范化(4)继承性
类的定义是累进的,任一个新类都是在另一个类的基础上定义的,新类继承了它的方法和实例变量。继承使所有的类构成一颗树形的结构,在Objective-c中使用类一般要继承或间接继承于基类:NSObject,因为NSObject提供了大量的有用特性。比如,一些图形类,需要继承于Shape类,而Shape是Graphic类的子类,Graphic又继承于NSObject类,因此,还是间接继承于NSObject类。类的继承关系图3-1所示:
图3-1 Objective-C类继承图
在项目中NSObject集合了所有类的基本方法,所有的=类都继承或者间接继承NSObject。2.社会市场因素可行性
如今社会发展迅速,手机行业更是赤手可热,手机应用的开发也是更新换代比较频繁,一款好的手机软件商店,不仅能适应市场的发展方向,更是为广大用户带来福利以及便捷。
按照目前市场情形,越来越多的移动开发者涌进iOS开发领域。iOS平台上应用软件,App Store的支付模式更为成熟而且有监管,另外iOS的兼容性问题小,开发人员不用考虑太多的配置兼容问题,美观大方的外形,更是吸引了大量
河南理工大学毕业设计(论文)说明书 的用户。而且其良好的用户体验,都为iOS的发展奠定了良好的基础。3.硬件工具可行性
使用工具方面,开发工具ios xcode6.0版本,要求mac10.8操作系统,一台已经安装有所有必备的软件及相应软件设备的计算机;内存要求大于或等于2G。
3.2 爱限免手机应用app功能需求分析
爱限免手机应用app,设计5个模块,每个模块各司其职,在整个工程中又到了MVC模式,单例模式,block模式,是每个功能模块化各模块之间的联系降到最低,使得每个模块都类似一个小型的家庭,每个成员各司其职,这样就降低了程序的耦合性有利于后期代码的维护,模块化的设计也使得你的app看起来更有你条理性,下边就是对模块化的图文解释,具体如图3-2-1:
图3-2-1 模块展示
河南理工大学毕业设计(论文)说明书
此图清晰的展示了app的5个功能模块,首相是上边的5个大模块,由一个分栏控制器UITablebarController控制,把这5各模块放到分栏控制器数组中进行控制,如图3-2-1设一个搜索控制器和一个详情控制器,通过正反向传值把5大功能模块的信息传到这两个控制器上边进行显示,其中在详情页面还有收藏分享工能,收藏使用了一个数据库进行装载数据,分享实在MOb注册了开发者 根据官方文档进行了qq空间分享(需要有qq空间客户端才行)。
3.2.1 功能需求
1.App应用的查看功能需求
此项目分别有5各视图控制器viewcontroller分别有系统的分栏控制器tabbaicontroller控制,可以根据下标来回相互切换,每个视图控制器上边都有一个表格控制器UITableview来进行展示数据内容,由于数据的内容各不相同,表格控制器还需要适应每个数据的变化,视图控制器之间还可以相互跳转,一般都是通过压栈的形势来进行跳转。2.App应用详情查看表功能需求
应用详情的展示由xib可视化编程和代码两者结合实现,可以展示商品的图片、大小、类型、详情介绍等内容,还有周边推荐,可以看到周边人的app,以经纬度来确定摸个区域。3.在线搜索应用功能需求
搜索功能有uiseacrbar来实现,通过app的名字,汉字英文都可以,通过代理方法把输入框里边的内容和数据中的信息对比,有相同的就保存到数组中,再通过UItableview展示到界面上来。4.在线app分享功能需求
分享的第三放有很多,我这里只用mob进行空间分享,这个功能需要开发者注册开发者账号,在官网上下载分享文档,提取核心代码,分享的实现有mob完成。
5.App收藏功能需求
App的收藏这里与运用了数据库,可以通过点击事件把你点击的app加到数据库中,再在相应的界面进行信息展示。6.App图片保存功能需求
通过点击事件来触发收藏相册的代理事件,把相应的图片收藏到相册,打开相册即可观看。
河南理工大学毕业设计(论文)说明书
7.App应用设置的功能需求
这里的app设置功能只做了,对收藏的app进行删除的操作。
河南理工大学毕业设计(论文)说明书
第4章 爱限免手机应用app设计
系统设计阶段主要的任务是系统各个模块的具体设计与实现。
4.1 模块功能设计
下面以具体的效果来展示各个功能模块。
4.1.1 限免模块
1实现显示免费app的展示 2 对限时免费app的详情查看 3对现实免费app的时间倒计时 4 app基本信息的显示
限免功能模块运行效果图如下4.1.1-1,4.1.1-2所示
图4.1.1-1限免界面
此图为限免模块的展示,如图界面由一个uitableview覆盖真个屏幕,商品在每个cell上进行信息展示,具体的设计由xib完成,下面展示cell的设计:
下边我就用代码来展示一下这个界面的实现: 首先是对网络数据的请求startTime;
cell.surplusTimeLabel.text = [NSString stringWithFormat:@”剩余:%.2lld:%.2lld:%.2lld“,time/3600,time%3600/60,time%60];
}else{
AppMode1 *mode = _searchArr[indexPath.row];
cell.nameLabel.text = mode.name;
cell.iconImage.image = [UIImage imageWithData:mode.iconData];
cell.lastPriceLabel.text = [NSString stringWithFormat:@”¥ %.1f“,[mode.lastPrice floatValue]];
cell.categoryLabel.text = [mode.categoryName isEqualToString:@”Game“]?@”游戏“:@”应用“;
cell.countLabel.text = [NSString stringWithFormat:@”分享:%@次 收藏:%@次 下载:%@次“,mode.shares,mode.favorites,mode.downloads];
//处理 星星
cell.starImageView.frame = CGRectMake(cell.starImageView.frame.origin.x, cell.starImageView.frame.origin.y, 65/5.0*[mode.starOverall floatValue], cell.starImageView.frame.size.height);//修改fream
河南理工大学毕业设计(论文)说明书
//处理 倒计时问题
NSDate *date = [NSDate date];
long long startTime =(long long)[date timeIntervalSince1970];
NSString *str = [mode.surplusTime componentsSeparatedByString:@”.“][0];
NSDateFormatter *fo = [NSDateFormatter new];
fo.dateFormat = @”YYYY-MM-dd HH:mm:ss“;
NSDate *endDate = [fo dateFromString:str];
long long endTime =(long long)[endDate timeIntervalSince1970];
long long time = endTime(UITableViewCell
*)tableView:(UITableView
*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@”cell“];
if(tableView == _tableView){
AppMode1 *mode = _dataArr[indexPath.row];
cell.nameLabel.text = mode.name;
cell.iconImage.image = [UIImage imageWithData:mode.iconData];
cell.lastPriceLabel.text = @”¥ 0.0“;
cell.categoryLabel.text = [mode.categoryName isEqualToString:@”Game“]?@”游戏“:@”应用“;
cell.countLabel.text = [NSString stringWithFormat:@”分享:%@次 收藏:%@次 下载:%@次“,mode.shares,mode.favorites,mode.downloads];
//处理 星星--下面两项 在xib中已经处理过
//
cell.starImageView.contentMode = UIViewContentModeLeft;//设置图片填充方式
//
cell.clipsToBounds = YES;//设置 自动切割超出自身fream的部分
cell.starImageView.frame cell.starImageView.frame.origin.y,=
CGRectMake(cell.starImageView.frame.origin.x, 65/5.0*[mode.starOverall
floatValue], cell.starImageView.frame.size.height);//修改fream
cell.surplusTimeLabel.text = [NSString stringWithFormat:@”评分:%.2f分“,[mode.starOverall floatValue]];
}else{
AppMode1 *mode = _searchArr[indexPath.row];
cell.nameLabel.text = mode.name;
cell.iconImage.image = [UIImage imageWithData:mode.iconData];25
河南理工大学毕业设计(论文)说明书
cell.lastPriceLabel.text = @”¥ 0.0“;
cell.categoryLabel.text = [mode.categoryName isEqualToString:@”Game“]?@”游戏“:@”应用“;
cell.countLabel.text = [NSString stringWithFormat:@”分享:%@次 收藏:%@次 下载:%@次“,mode.shares,mode.favorites,mode.downloads];
//处理 星星
cell.starImageView.frame cell.starImageView.frame.origin.y,=
CGRectMake(cell.starImageView.frame.origin.x, 65/5.0*[mode.starOverall
floatValue], cell.starImageView.frame.size.height);//修改fream
cell.surplusTimeLabel.text = [NSString stringWithFormat:@”评分:%.2f分“,[mode.starOverall floatValue]];
}
UILabel *lebel =(UILabel *)[cell.contentView viewWithTag:10];
lebel.hidden = YES;
return cell;} 4.2.2 专题模块
1按照一定的专题分类显示 运行效果图如下4.2.2-1
图4.2.2-1 专题界面
河南理工大学毕业设计(论文)说明书
专题界面实现如图所示,从图上不难看出这个界面的cell复杂得多,这个cell上不仅仅是一个app的展示,而是集合了多个app,每个app都显示不同的信息,而且点击每个app都会显示对应的商品详情,在这里处理这个就用到了block传值,下面对界面的设计进行代码展示,首先是请求数据的展示: AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:PAGE_D_URL parameters:@{@”page“:@”1“,@”limit“:@”5“} success:^(AFHTTPRequestOperation *operation, id responseObject){
NSArray *arr = responseObject;
for(int i=0;i AppMode4 *mode = [[AppMode4 alloc]init]; mode.title0 = arr[i][@”title“]; mode.imageUrlStr1 = arr[i][@”img“]; mode.imageUrlStr6 = arr[i][@”desc_img“]; mode.title5 = arr[i][@”desc“]; mode.title1 = arr[i][@”applications“][0][@”name“]; mode.title2 = arr[i][@”applications“][1][@”name“]; mode.title3 = arr[i][@”applications“][2][@”name“]; mode.title4 = arr[i][@”applications“][3][@”name“]; mode.imageUrlStr2 = arr[i][@”applications“][0][@”iconUrl“]; mode.imageUrlStr3 = arr[i][@”applications“][1][@”iconUrl“]; mode.imageUrlStr4 = arr[i][@”applications“][2][@”iconUrl“]; mode.imageUrlStr5 = arr[i][@”applications“][3][@”iconUrl“]; mode.star1 = arr[i][@”applications“][0][@”starOverall“]; mode.star2 = arr[i][@”applications“][1][@”starOverall“]; mode.star3 = arr[i][@”applications“][2][@”starOverall“]; mode.star4 = arr[i][@”applications“][3][@”starOverall“]; mode.btnTitle1_1 = arr[i][@”applications“][0][@”comment“]; mode.btnTitle1_2 = arr[i][@”applications“][0][@”downloads“]; mode.btnTitle2_1 = arr[i][@”applications“][1][@”comment“]; mode.btnTitle2_2 = arr[i][@”applications“][1][@”downloads“];27 河南理工大学毕业设计(论文)说明书 mode.btnTitle3_1 = arr[i][@”applications“][2][@”comment“]; mode.btnTitle3_2 = arr[i][@”applications“][2][@”downloads“]; mode.btnTitle4_1 = arr[i][@”applications“][3][@”comment“]; mode.btnTitle4_2 = arr[i][@”applications“][3][@”downloads“]; _IDarray = @[arr[i][@”applications“][0][@”applicationId“],arr[i][@”applications“][1][@”applicationId“],arr[i][@”applications“][2][@”applicationId“],arr[i][@”applications“][3][@”applicationId“]]; [_IDMUarray addObject:_IDarray]; [_dataArr addObject:mode]; } [_tableView reloadData]; } failure:^(AFHTTPRequestOperation *operation, NSError *error){ }];} 下面展示cell的赋值问题,这里我们会为每个app打上标签,一遍我们在传值的时候能辨认我们还点击的是哪个app。 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ CustomCell_D *cell = [tableView dequeueReusableCellWithIdentifier:@”cell“]; cell.array = _IDMUarray[indexPath.row]; AppMode4 *mode = _dataArr[indexPath.row]; [cell setBlock:^(NSString *ID){ ViewControllerA_2 *viewCtl_2 = [[ViewControllerA_2 alloc]init]; viewCtl_2.appId = ID; [self.navigationController pushViewController:viewCtl_2 animated:YES]; }]; [cell.myImageView1 setImageWithURL:[NSURL URLWithString:mode.imageUrlStr1] placeholderImage:[UIImage imageNamed:@”topic_TopicImage_Default“]]; [cell.myImageView2 setImageWithURL:[NSURL URLWithString:mode.imageUrlStr2] placeholderImage:[UIImage 河南理工大学毕业设计(论文)说明书 imageNamed:@”topic_TopicImage_Default“]]; [cell.myImageView3 setImageWithURL:[NSURL URLWithString:mode.imageUrlStr3] placeholderImage:[UIImage imageNamed:@”topic_TopicImage_Default“]]; [cell.myImageView4 setImageWithURL:[NSURL URLWithString:mode.imageUrlStr4] placeholderImage:[UIImage imageNamed:@”topic_TopicImage_Default“]]; [cell.myImageView5 setImageWithURL:[NSURL URLWithString:mode.imageUrlStr5] placeholderImage:[UIImage imageNamed:@”topic_TopicImage_Default“]]; [cell.myImageView6 setImageWithURL:[NSURL URLWithString:mode.imageUrlStr6] placeholderImage:[UIImage imageNamed:@”topic_TopicImage_Default“]]; cell.myLabel1.text = mode.title1; cell.myLabel2.text = mode.title2; cell.myLabel3.text = mode.title3; cell.myLabel4.text = mode.title4; cell.myLabel5.text = mode.title5; [cell.btn1_2 setTitle:mode.btnTitle1_2 forState:UIControlStateNormal]; [cell.btn1_1 setTitle:[NSString stringWithFormat:@”%@“,mode.btnTitle1_1] forState:UIControlStateNormal]; [cell.btn2_2 setTitle:mode.btnTitle2_2 forState:UIControlStateNormal]; [cell.btn2_1 setTitle:[NSString stringWithFormat:@”%@“,mode.btnTitle2_1] forState:UIControlStateNormal]; [cell.btn3_2 setTitle:mode.btnTitle3_2 forState:UIControlStateNormal]; [cell.btn3_1 setTitle:[NSString stringWithFormat:@”%@“,mode.btnTitle3_1] forState:UIControlStateNormal]; [cell.btn4_2 setTitle:mode.btnTitle4_2 forState:UIControlStateNormal]; [cell.btn4_1 setTitle:[NSString stringWithFormat:@”%@“,mode.btnTitle4_1] forState:UIControlStateNormal]; cell.star1.frame = CGRectMake(cell.star1.frame.origin.x, 29 河南理工大学毕业设计(论文)说明书 cell.star1.frame.origin.y, 65/5.0*[mode.star1 floatValue], cell.star1.frame.size.height); cell.star2.frame = CGRectMake(cell.star2.frame.origin.x, cell.star2.frame.origin.y, 65/5.0*[mode.star2 floatValue], cell.star2.frame.size.height); cell.star3.frame = CGRectMake(cell.star3.frame.origin.x, cell.star3.frame.origin.y, 65/5.0*[mode.star3 floatValue], cell.star3.frame.size.height); cell.star4.frame = CGRectMake(cell.star4.frame.origin.x, cell.star4.frame.origin.y, 65/5.0*[mode.star4 floatValue], cell.star4.frame.size.height); return cell;} 4.2.3 分享功能模块 1实现了分享的功能 运行效果图如下4.2.3-1 图4.2.4-1 点击分享默认界面 在这里分享功能我用了mob第三方分享,通郭mob给的官方文档,导入系统库,就可以实现分享功能,具体代码如下展示: //注册shareSDK [ShareSDK registerApp:@”74f6b479a893“]; //添加QQ空间应用 注册网址 http://connect.qq.com/intro/login/ [ShareSDK connectQZoneWithAppKey:@”1104627452“ appSecret:@”Usc84bJXmMeTzNCI“ qqApiInterfaceCls:[QQApiInterface class] tencentOAuthCls:[TencentOAuth class]]; 河南理工大学毕业设计(论文)说明书 //添加QQ应用 注册网址 http://open.qq.com/ [ShareSDK connectQQWithQZoneAppKey:@”1104627452“ qqApiInterfaceCls:[QQApiInterface class] tencentOAuthCls:[TencentOAuth class]]; //分享点击事件 -(IBAction)shareButton:(id)sender { //构造分享内容 id defaultContent:@”测试一下“ image:[ShareSDK imageWithPath:nil] title:@”ShareSDK“ url:@”http://www.xiexiebang.com“ description:@”这是一条测试信息“ mediaType:SSPublishContentMediaTypeNews]; //创建弹出菜单容器 id [container setIPadContainerWithView:sender arrowDirect:UIPopoverArrowDirectionUp]; //弹出分享菜单 [ShareSDK showShareActionSheet:container shareList:nil content:publishContent statusBarTips:YES authOptions:nil shareOptions:nil result:^(ShareType type, SSResponseState state, id if(state == SSResponseStateSuccess) { NSLog(NSLocalizedString(@”TEXT_ShARE_SUC“, @”分享成功“)); } else if(state == SSResponseStateFail) { 河南理工大学毕业设计(论文)说明书 NSLog(NSLocalizedString(@”TEXT_ShARE_FAI“, @”分享失败,错误码:%d,错误描述:%@“), [error errorCode], [error errorDescription]); } }];} 4.2.4 收藏功能模块 1显示你是否收藏成功 运行效果图如下4.2.5-1 图4.2.4-1 点击收藏显示界面 收藏功能我这里使用了一个ios本地数据库codata也是对sqlite的封装,这里使用了ios的单例模式,把这个数据库写在中转站中,形成一个单例,所谓的单例就是在整个项目工程中只会被实例化一次,不会重复多次实例化,确保每次取到的都是同一个数据库,代码如下 @interface AppDelegate : UIResponder @property(strong, nonatomic)UIWindow *window; @property(readonly, strong, nonatomic)NSManagedObjectContext *managedObjectContext;@property(readonly, strong, nonatomic)NSManagedObjectModel *managedObjectModel;@property(readonly, strong, nonatomic)NSPersistentStoreCoordinator 河南理工大学毕业设计(论文)说明书 *persistentStoreCoordinator; 在没次收藏成功的时候都会有一个提示图标,就是图里边的温馨提示,这里使用了一个 UIAlertView 来实现这个功能具体代码如下: //赋值头像 AFHTTPRequestOperationManager *man = [AFHTTPRequestOperationManager manager]; man.responseSerializer = [AFHTTPResponseSerializer serializer]; [man GET:_myIconUrl parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject){ mode.iconData = responseObject; //存储数据 [dele.managedObjectContext save:nil]; //弹出提示 收藏成功 UIAlertView *alv = [[UIAlertView alloc]initWithTitle:@”温馨提示“ message:@”收藏成功“ delegate:self cancelButtonTitle:@”知道了“ otherButtonTitles:nil, nil]; [alv show]; } failure:^(AFHTTPRequestOperation *operation, NSError *error){ }];下面就是收藏功能的实现,这里收藏功能是通过appdelegate把实例化的数据库在相应的控制器种取到,把要收藏的app添加到数据库中实现本地化存储,从而实现收藏,具体代码如下: //取得 实体对象 AppDelegate *dele = [UIApplication sharedApplication].delegate; AppMode *mode = [NSEntityDescription insertNewObjectForEntityForName:@”AppMode“ inManagedObjectContext:dele.managedObjectContext]; //赋值 mode.appId = self.appId;33 河南理工大学毕业设计(论文)说明书 mode.name = _myName;这样就把喜欢的app进行了收藏,由于这个数据库是被写成了单例,因此里边的数据是会不断更新的,而数据内容就是收藏的app,在需要展示的界面取出来数据库进行刷表就可以实现展示,具体代码如下: [_arr2 removeAllObjects]; //从数据库取出收藏的app AppDelegate *delegate = [UIApplication sharedApplication].delegate; NSFetchRequest *request = [NSFetchRequest new]; request.entity = [NSEntityDescription entityForName:@”AppMode“ inManagedObjectContext:delegate.managedObjectContext]; _arr = [delegate.managedObjectContext executeFetchRequest:request error:nil]; //创建一个 滚动视图,高度根据需要改变 _sView = [[UIScrollView alloc]initWithFrame:self.view.bounds]; _sView.frame= CGRectMake(0, 50, self.view.bounds.size.width, self.view.bounds.size.height); [self.view addSubview:_sView]; _sView.contentSize = CGSizeMake(self.view.bounds.size.width, 50+(_arr.count /3 +1)*100); //根据收藏的app个数 创建图标 for(int i =0;i<_arr.count;i++){ UIImageView *view = [[UIImageView alloc]initWithFrame:CGRectMake(30+i%3*100, 50+i/3*100, 60, 60)]; //打开人机交互开关 view.userInteractionEnabled = YES; view.image = [UIImage imageWithData:[_arr[i] iconData]];34 河南理工大学毕业设计(论文)说明书 view.tag = 600+i; UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y + 60, 60, 20)]; label.textAlignment = NSTextAlignmentCenter; label.font = [UIFont systemFontOfSize:12]; label.text = [_arr[i] name]; [_sView addSubview:label]; [_sView addSubview:view]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(gesAction:)]; [view addGestureRecognizer:tap]; //创建 删除小图标 UIImageView *view2 = [[UIImageView alloc]initWithFrame:CGRectMake(-10,-10, 70, 70)]; //打开人机交互开关 view2.userInteractionEnabled = YES;// view2.backgroundColor = [UIColor lightGrayColor]; view2.contentMode = UIViewContentModeTopLeft; view2.image = [UIImage imageNamed:@”close“]; //添加到 图标视图上 [view addSubview:view2]; //判断是否 隐藏 删除小图标 if(!_btn.selected){ view2.hidden = YES; } //添加手势 UITapGestureRecognizer *tap2 = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(deleteGesAction:)]; [view2 addGestureRecognizer:tap2];35 河南理工大学毕业设计(论文)说明书 //添加到数组 [_arr2 addObject:view2];App的删除功能也是在这里实现的,通过点击设置按钮,使app的图标显示删除“×”,点击,把它从数据库中删掉,刷新数据,代码如下: //删除收藏的数据 -(void)deleteGesAction:(UIGestureRecognizer *)ges{ //根据点击的view 获取角标------正好相对应 要删除的app在arr中的角标 NSInteger index = [_arr2 indexOfObject:ges.view];// NSLog(@”%ld",index); //从数据库取出收藏的app AppDelegate *delegate = [UIApplication sharedApplication].delegate; //删除 [delegate.managedObjectContext deleteObject:_arr[index]]; [delegate.managedObjectContext save:nil]; //刷新页面 [_sView removeFromSuperview]; [self loadData];4.2.5 搜索功能模块 1实现app名字搜索显示 2 点击可以查看信息 运行效果图如下4.2.5-1,36 河南理工大学毕业设计(论文)说明书 图4.2.5-1 搜索结果界面 搜索界面的实现实在原有界面的基础上加上实现代理方法,用uiseachbar来实现app的搜索功能核心代码如下 -(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{ //清空搜索结果数组 [_searchArr removeAllObjects]; for(AppMode1 *mode in _dataArr){ if([mode.name rangeOfString:searchString].location!= NSNotFound){ [_searchArr addObject:mode]; } } return YES;} 37 河南理工大学毕业设计(论文)说明书 第5章 系统测试 系统测试是保证系统质量和可靠性的关键步骤,是对系统开发过程中的系统分析系统设计和实施的最后复查。根据测试的概念和目的,在进行信息系统测试。 5.1 功能模块测试 1.限免模块的测试,主要测试、接口数据是否能正确显示,不出现闪退的情况,时间会不会刷新,每个app的星级会不会正确显示,这些测试中唯独最后两项最为麻烦,第一次测试的时候星星的显示问题总是搞不定,不管怎么调试都是显示五颗星,和显示的数据不照应,经过同学的帮忙,忙才发祥是父视图没有对子视图进行切割,还有就是限免的价格是被拉掉的,我是用xib做的拉掉的效果,但是在点击这个app的时候这个被拉掉的线就会莫名的消失,变成原样,当时周围的同学也是每办法了,这个问题一直拖到了最后,知道有天逛博客时看到有一篇博客写到点击cell的时候,cell会变成灰色,当时我就想到了这个问题,我认为我的划线没了可能是和cell的背景色冲突了,把这个关掉之后,果不其然,划线不会消失了。 2.降价模块测试,主要针对数据解析json的正确应用,josn解析的时候主要注意里边数据的取值方式,json数据里边你需要的可能是有一个数组构成的,也可能是一个字典,正当的取值才不会造成无谓的越界现象,还有json数据中并不是所有的数据都是字符串的形势显示,也可能会出现NSnumber的数据,当时在后期调试的时候,我的程序就因一个NSNUmber的数据没有处理好,导致程序崩溃,还很难找,因为我就没想到我会在这里取值出错误。 3.免费模块测试,主要测试对数据的解析,以及内容的显示。 4.专题模块的测试,主要测试cell上的控件是不是能正确的传值,主要注意block在反向传值的时候的回调,以及对block的应用,专题模块这一点可以说的是我耗时最多的一个界面,主要就消耗在界面传值这一块,由于cell上的app比较多,对于如何处理我选中的是哪个app是我一度陷入盲区,不知道如何处理,首先想到的方法是取到app的父视图,但是运行的时候根本不行,知道后边学习了block才解决了这个问题。 5.详情页面的测试,主要测试是不是每个界面都能正确的传进来数据,以及对数据的展示,数据图片不一样多造成的越界现象,图片的加载相册功能,分享功能,收藏功能。对周边应用的具体详情再次查看,怎么进行数据的处理,详情页面在处理的时候,难点就在于怎么把本页的周边app再通过点击app在本页显 河南理工大学毕业设计(论文)说明书 示具体的信息,这个问题导致我把程序进行了大修改,烦躁啊,因为前期的逻辑没处理好,导致这里传值出问题,不过在我的努力下还是把程序都改了。 在完成逐个模块测试后,开始对系统进行验收测试,运行该系统,在运行过程中查找出现的错误。 5.2 功能整体测试 在安装好配置环境的电脑上测试,刚开始出现屏幕混乱,经过反复修改,现在已经能正常运行。用xcode上自动检测内存工具,检测出多处内存泄露问题,都已经修改。测试到这个阶段就简单多了,繁琐的工作都做完了,不过在这个阶段我还是发现了一个严重的问题,就是内存泄露,原因是我在cell中实例化了一个控件,我当时竟然天真的以为ARC不会有内存泄露,但是还是出现了,cell复用的时候,虽然使用的以前的cell,但是你在cell里边申请的控件还会一直开辟空间消耗内存,这样就会导致内存泄露。 河南理工大学毕业设计(论文)说明书 总结与展望 总结 经过一段时间的忙碌,终于把毕业设计的任务完成了。现在我对该系统做一下总结 本项目的开发目标,主要是为了提供iphone手机应用平台,为用户更好的体验iphone手机。设计经过紧张而有序的系统开发,收获颇丰,感触颇深。现在对经验收获、教训反思两大部分总结如下: 经验收获: 1.编写程序前,对已完成设计构思的系统进行主次分析,排好功能实现顺序,列出程序编、写步骤,对于理清编程思路很有帮助。人的逻辑思维可能很发达,在设计当中可以不用笔记,在脑中就能想好三到五个功能的逻辑关系和编写步骤。但以后我们面对的是一个庞大的系统,大系统下分多个子系统,子系统下分多个功能模块,功能模块下分多个功能页面,功能页面下分多个子功能,而且子系统、功能模块、功能页面、子功能之间的逻辑关系构成了一张复杂庞大的逻辑关系网。这就需要我们在原先做好的设计流程图上,系统规划,全面分析,逐步细化,反复斟酌、推敲,然后列出编程计划。 2.善于借鉴他人的成果,实现自己的功能,可以有效地缩短开发时间,提高工作效率,是快速提高编程能力的最佳途径。借鉴他人的劳动成果并不是简单地拷贝别人的源代码,如果只是这样的话,你会因为系统经常的报错,却束手无策,最后将其认为是鸡肋而抱怨连天。应该是先要分析读透他人的程序思想,取其精华,去其糟粕,使之成为自己的思想,然后将这些功能块与自己的功能块融合。 3.在完成这个课题的过程中,遇到了很多问题。对于iOS的开发过程更是头疼,因为在iOS中有些控件必须接收协议,而且不用手动调用协议中的方法,系统自己调用,比如:UITableView。这个让我感觉很不可思议,以至于每次非得手动调用协议,但是每次都出错,后来就记住这个问题了。 4.每编完一个功能,应及时与其它完成功能一起测试,运行无误后,方可进行下一步开发。这样做是为了在测试时如果出错能很方便地找到出错的环节和病因所在,我们称之为“step by step”(一步一脚印),对于一个初级的程序开发者来说是很有帮助的。对于编程人员来说每一个环节都是来不得有半点差错的,每一个功能都是环环相扣,相互关联,相互作用的 河南理工大学毕业设计(论文)说明书 教训反思:(1).学习与实践的结合不当。当我进行程序开发的时候,发现以前学习的知识点到用时却忘得一干二净了,也只好重新学习基本知识了。如果以前把知识学得透彻点,理解深刻点,也许在开发过程中可以缩短时间,提高效率。反思自我,归其原因:不是当时的学习不够认真,而是缺乏对知识点的运用实践;对于像我这样“半路出家”的编程人员来说,只是理解知识点是远远不够的,如果当时没有经过编译、运行、调试的过程,很快就会忘记的。 (2).学习目标不专一。我们都知道在学习的时候是最忌讳这个还没学明白就去学那个的,结果当然是哪个也没学明白。这个没学好,就想用另一个,造成学习不深入,学习效果不好。以后一点要记住此教训。 展望 这次毕业设计项目做得时间挺长的,从开始学习c语言,到后来的高级语言objective-c、UI、初级网络、高级网络等。到最后项目的结束,感觉自己学习到了很多知识,但是知道的越多你就会越发的感觉到自己知识的不足,第一次开始认认真真的学习c还是从图书馆里的《21天精通c语言》开始,是一门语言你就要记忆很多东西,我学习的时候觉得最难得不是逻辑而是记忆,到后来的objective-c,这门高级语言的底层是对c语言的封装,把c的很多逻辑封装成方法,你只需拿来用就ok了,oc学完的时候已经是年后了,之后学习了UI的界面搭建,以及初级网络。学完初级网络就着手写自己的毕业项目,当时觉得很难,很多知识都不熟悉,还有分享,block等高级网络的知识还没有接触到,因此在初期毕业项目制作过程中只完成了界面的加载数据,界面之间没有相互的跳转,很没有活力,基本的界面搭建完成已经过了一个多星期了,之后有做了bug调试,把出现的问题解决了,这样这个app才有了形,这个完成之后我就着手学习了高级网络,接触到了分享,支付,通信等知识,还学了block的界面传值,平时学习完都会做一些小的demo来做练习,大概一星期之后才回头来完善自己的毕业项目,这是的毕业项目也已不是当初的大难题了。 虽然毕业项目做完了,但是功能并不是那么完美,就像我刚开始接触这门语言时,我会觉得很难办,到我学的多了,见得多,用的多了,丰富的知识已经让我感觉到自己入门了,有自己的学习方法了,本来学习就是一个循循渐进的过程,我们每个人都不可能一下子做的很完美,很出色,都需要不断的完善。我也希望自己在以后的工作中得到更多的知识、经验。让自己不断地进步,做出属于自己 41 河南理工大学毕业设计(论文)说明书 的独特的作品。 河南理工大学毕业设计(论文)说明书 参考文献 [1] 谭克强Objective-C程序设计(第四版)。 [2] 51cto网站oc教学视频自学。以及对牛人博客的借鉴。[3] 21天精通c语言,河南理工大学,图书馆。[4] 博客园学习,主要学习UI时对我的帮助很大。 [5] cocoaChina第三方库的使用,对后期做毕业设计,提供很多便利。 [6] 个人觉得最好用的还是度娘,什么问题都可以问她,自学学到的东西才会理解的更 深刻。 [7] DaveMak(美)JackNutting(美)JeffLaMarche(美)著.杨越孙文磊等译.ios5基础 教程[M].北京:人民邮电出版社.2013:3 [8] MarkDalrymple(美)ScottKnaster(美)著.杨越等译.Objective-C基础教程[M].北 京:人民邮电出版社.2012:7 [9] StephenG.Kochan著.林翼、范俊、朱奕欣译.Objective-C程序设计(第四版)[M]。北京:电子工业出版社,2012:12 [10] 虞斌著.Ios软件开发揭秘:iPhone&iPad企业应用和游戏开发[M].北京:电子出 版社,2011:1 [11] 克莱尔(美)著.李强译.Objective-C2.0Mac和ios开发实践指南[M].北京:机械 工业61出版社,2011:1 [12] BrianW.KernighanDeninisMRirchie著,徐宝文,李志(译)TheCProgramming Language[M].北京:机械工业出版社2003:2 [13] 徐松林,黄猛著.cocos2D-x手机游戏开发[M].北京:人民邮电出版社.[14] Ronpatton(美)著.王钰,曹跃译.软件测试[M].北京:机械工业出版社,2006 [15] 王水著.软件工程[M].河南:河南科学技术出版社,2008:8 [16] 吴洁明著.软件工程实例教程[M].北京:清华大学出版社,2010:11 43 河南理工大学毕业设计(论文)说明书 谢 辞 在本论文的写作过程中,我的导师宋成老师倾注了大量的心血,从选题到开题报告,从写作提纲,到一遍又一遍地指出每稿中的具体问题,严格把关,循循善诱,在此我表示衷心感谢,谢谢宋成老师在我撰写论文的过程中给与我的极大地帮助 同时我要感谢学院的各位老师、同学和朋友。在整个的论文写作中,各位老师、同学和朋友积极的帮助我查资料和提供有利于论文写作的建议和意见,在他们的帮助下,论文得以不断的完善,最终帮助我完整的写完了整个论文 另外,要感谢在大学期间所有传授我知识的老师,是你们的悉心教导使我有了良好的专业课知识,感谢这四年来计算机学院对我的栽培,使我成为了一名合格的理工学子。 刚入门UI的小伙伴是不是不知道app该怎么切图、规范是什么?怎么和程序员同学配合,用什么工具更方便,怎么标注自己的设计稿,怎么做到一稿适配多种机型,这篇文章将一一解答你的疑问! 依旧声明:这里写的不是一种规范,只是一种工作方法,大家在具体工作中,一定要灵活运用。另外,技术的更新是非常快的,所以,还是要灵活运用~ 我本身是一名GUI设计师,所以我只站在GUI设计师的角度去把APP从项目启动到切片输出的过程写一写,相当于工作流程的介绍吧;公司不同,流程不尽相同,但是终究还是能有些帮助。 这里我们只说IOS系统下的设计,至于Android,因为尺寸太多,涉及的东西比较乱,我整理好以后再说吧。 页面篇幅比较长,不推荐一次性看完,那样你潜意识里就会对它厌烦了,所以可以有时间读一读,看一看。 Part 1 项目立项 完善的公司会把项目相关人员聚集起来,产品经理会把产品详细的用原型展示出来,包括产品定位,市场需求,主打卖点,产品性质以及各模块具体功能,逻辑跳转演示一下;之后会评估项目用时,各部门协调,项目启动。 话不多说,接到原型,那我们应该做什么准备工作呢? 在项目设计之初,就该进行项目归档整理,我的习惯是“项目名称+版本序列”; 没有最正确的工作方法,只有最适合自己的工作习惯。 我个人习惯把不同类型的文件划分到不同类型的文件夹里,有的设计师习惯全都放在一个文件夹里,如果文件少还说的过去,如果页面过多,就知道这样的利弊了。 工欲善其事必先利其器,基本上我做界面设计用的最多的就是PS和AI了,版本无所谓,用着舒服就行,推荐版本高一点的,低版本好多方便功能都没有。 标注工具: PxCook,目前我还没用上Mac,所以也不知道传说中的Sketch到底多神奇。PxCook在Windows上标注还比较顺手,虽然它还附带切图功能,但是比较鸡肋,不推荐用它切图。 切图工具: Cutterman 点击下载一款PS的插件,切图非常方便,但不支持绿色免安装版本PS,而且对PS版本要求比较高,针对CS 6的已经不维护更新了。推荐安装官方完整版PS cc,然后自行破解。官网上有安装使用教程,自己研究下吧,因为我也是最近才开始接触这款插件。 Assistor PS 也是一款PS的切图标注插件,也被誉为神器;我使用了下,感觉相当不错,就是标注还没太适应,推荐一下这个。 标注工具以及这两款插件我都会上传,至于安装方法去“百度一下”吧,易学易用。Part 2 Photoshop设计尺寸 现在常用的几种设计尺寸 1.640*960 4时代的尺寸,刚接触APP设计用的是这个尺寸,拟物盛行的时代(现在用这个尺寸设计的应该比较少了吧); 2.640*1136 5/5S/5C,IPhone更新,咱们设计也得跟着与时俱进(应该还有人用这个设计尺寸),进入扁平的时代了; 3.750*1334 6 目前我做设计稿的设计尺寸,IPhone6的尺寸,向下可以适配4,5,向上可以适配6 plus;我记得IP6推出后,我问总监应该用什么尺寸设计,他说用IP6的吧,好适配,切出来就是@2x了,改一改上下都能照顾到。 推荐做设计稿的时候使用IPhone6的尺寸进行设计。 IP 6的尺寸相比于IP 5来说,很多系统控件尺寸并未变化,只是高度也就是内容显示区域发生了变化。下面是IPhone 6的空白文档,我建立了参考线。 文档建立之初就设置好参考线是个很好的工作习惯,我希望更多的设计师可以养成更好的工作习惯。 上下的参考线很容易设置,因为是根据IPhone自身系统设置的,左右的参考线我习惯设置为24px,也就是显示内容距离边框的距离。这不是绝对的,我和总监研究过,究竟是设置为左右30px还是24px比较好,通过对国内国外各种APP的对比,觉得24px更适合一些,不宽不窄,这个完全是设计师个人的设计习惯,所以不要当成什么规范,确切的说,整个屏幕你都可以随便做,但是我们这里说的是正常页面。 Part 3 页面标注 标注是重中之重,工程师能不能完整的还原设计稿,很大一部分取决于标注;如果不清楚你该怎么标,一定要和工程师沟通! 每个工程师实现效果的方法不同,我在这里所说的,是我的标注习惯,但应该适用于大部分的设计师和工程师。 不需要每一张效果图都进行标注,你标注的页面能保证工程师开发每个页面的时候都能顺利进行即可; 这里的标注软件使用的是PxCook,先标一个空白文档,看看都需要什么吧 这里要说一句,PxCook虽然可以自动读取颜色,但是还不能对PSD文档里设置的透明度读取,所以如果你用了透明色,推荐你用文字标注直接写出来原色值以及透明度。基本上我并不使用PXCook里面的颜色标注工具,而是使用文字标注工具,因为要标识两种色值,PxCook只能显示一种色值。 一般我的习惯是PS和标注软件同时打开,因为有时候标注软件并不能完全的把PSD文件里的东西标注出来,所以标注也要灵活运用,如果无法标注,就到PS里查看一下,然后再使用文字标注说明一下。 标注颜色是使用16进制,还是RGB: 都用得到,要看实现什么东西,建议标注颜色时,两种色值表达都标上(16进制&RGB)。你需要标注的内容有: 1.文字需要提供:字体大小(px),字体颜色; 2.顶部标题栏的背景色值,透明度; 3.标题栏下方以及Tab bar上方其实有一条分割线,需要提供色值; 4.内容显示区域的背景色(如果是全部页面白色,那就和工程师说一句就行); 5.底部Tab bar的背景色值。 因为页面的种类成千上万,我想每种页面都讲一下,但是不现实,希望可以举一反三。下面的是一个比较普通的首页页面,但是基本上一款APP中应该标的元素都有了~ 一般页面你需要标注这些地方: 所有元素统一距离屏幕最左24px(全局性的数据可以直接和工程师沟通,也可以标注,推荐标注出来) 1.标题栏:背景色,标题栏文字大小,文字颜色(不再赘述); 2.Banner:所有撑满横屏的大图,不需要横向尺寸,把高度标出了就可以了;3.菜单图标: 图标的大小和图标的可点击区域不一定一致 也就是说,图标可以做的很小,但是为了保证点击的准确性和流畅性,工程师可以把可点击区域设置的很大,这样标注和切图的时候就要注意,标注的是可点击区域的大小,切图切的也是可点击区域的大小,也就是用透明区域去补上,否则图片会模糊。在设计的时候就要考虑可点击区域的范围,比如X宝购物车页面左侧的小圈,可点击区域要比实际小圈尺寸大很多。 这种类型的图标需要标注图标点击区域大小,图标距离屏幕最左最右以及上下的距离。至于图标的间距,因为有些时候可能 设计师不能完全做到1px不差,所以我基本不标,交给工程师让他们去处理,其实等距排列的图标不需要标间距,因为工程师还要动态适应不同的屏幕,标了间距也是白标(还是要和你的搭档沟通怎么去标注); 4.模块间隔:这个位置其实不是太重要,我习惯标注上这里,麻烦能少则少。5.图片+文字:这个应该比较常见,只标注一个单位(图+文)就可以了。 图片需要标注宽高,因为工程师要设置图片区域,从后台调取,可以这么说,软件里除了横屏撑满的图,基本上所有的图片都要标注宽高。 图片距离上下左右的距离,文字大小颜色,这里的文字其实算两个控件,标题文字以及说明文字,需要单独标出。 Tab Bar: 这个位置其实比较特殊,你可以单独标注图标大小+文字大小;还可以图标文字算作一个控件,整个切出来; 我们工程师的习惯是用整个的,也就是图标+文字算作一个ICON,所以我基本不怎么标注单独的图标(这里可以和你的搭档去沟通一下,看他是什么开发习惯)。关于列表页类型的标注问题 普通的列表有两种方法(去问你的搭档,他喜欢用什么方法): 1.标出行高,行内元素居中; 2.标出行内元素,元素上下间距,确定行高; 每种元素的位置如何确定: 通常标注的都是元素距离屏幕最左侧的距离,比如上图的图标元素距离左侧24px,文字元素距离左侧100px。 标注这个东西没有固定的方法,工程师的开发习惯不同,标注方法也不同。 该怎么标注虽然可以在网上找到方法,但那不一定适合你,一定和自己的搭档勤沟通,方法是死的,人是活的…… 所有的页面标注总结起来就是:标文字,标图片,标间距,标区域; (上述图标出现了45px的单数,因为软件自动吸附上去了显示了图标本身的尺寸,切图的时候记得输出个偶数尺寸的切片) Part 4 切片资源的输出 切之前务必要和你的工程师搭档沟通一下,该如何去切才能配合他的开发。 全局性的切图常见问题 ① 你的所有设计尺寸,包括图形效果,应该尽量使用偶数。 技术开发使用的尺寸是设计稿像素尺寸的一半,也就是说,如果你用24px的字体,技术那边就是设置为12px; 所以标注的时候务必使用偶数,为了保证最佳的设计效果,避免出现0.5像素的虚边。② 切图尺寸应该提供几套? ico_car.png IPhone2G,3G,3GS使用(好像没人用这手机了吧)ico_car@2x.png IPhone4,5,6优先加载此尺寸图片(不是必须使用这个尺寸,是优先加载调用这个尺寸)ico_car@3x.png IPhone6 plus使用的尺寸 可以简单的理解为倍数关系(其实是为了满足不同分辨率,我觉得不用过于深究),如果你使用IPhone 6尺寸做设计稿,那么切片输出就是@2x,缩小2倍就是@1x,扩大1.5倍就是@3x了。 理论上,为了达到最好的视觉效果,你应该输出三套尺寸,推荐输出三种尺寸的切片资源。我的工程师搭档要求我给两套尺寸就可以,也就是@1x @2x的两种尺寸,因为我们没有6 plus的测试机,所以看不到效果,据他说应该不会太失真,但是为了保证效果,我还是给三套尺寸。 另外现在几乎看不到3GS了,所以需不需要提供一倍图,还是要和工程师讨论一下~ @1x @2x @3x是开发工具Xcode软件需要的UI资源,命好名称后,IOS设备会自动的选取合适尺寸。 ③共用资源的图片,输出一张就可以 类似这种重复的按钮之类的,只要提供一张共用的资源就可以了;上面的文字是技术写上去的。 理论上按照最佳视觉效果,你应该提供多尺寸的图片;但通常我只提供最大尺寸的一张图片即可,这一点要和你的搭档沟通好,却问他需要什么方式。 ④切片的输出格式 文件→存储为Web所用格式 位图格式:PNG 24,PNG 8,JPG 在JPG和PNG两种格式图片大小相差不是很大的情况下,推荐使用PNG;如果图片大小相差很大,使用JPG。 欢迎页面,ICON一定要使用PNG格式,在不影响视觉效果的前提下,可以考虑使用PNG 8; 矢量图格式:PDF,SVG IOS原生支持的两种矢量图片格式,但是支持的一般,并不能保证100%把所有图片效果渲染出来; 为了保险起见,我通常不使用这两种格式,推荐还是使用位图,如果以后技术提升,100%支持SVG和PDF这种矢量格式图,那个时候也许不用提供这么多套尺寸了~ ⑤图标的点击区域 最小点击区域问题: IOS人机指导手册里推荐的最小可点击元素的尺寸是44*44 point(点),在设备上1 point等于1像素,所以转换成像素就是44*44像素,换算成物理尺寸大概是7mm左右吧(人机工效学研究中得出的结论:用食指操作,触击范围在7mm左右合适;用拇指操作,范围在9mm左右合适)。据说这个尺寸下,不容易出现误操作,误点击;小于这个尺寸,点击就会变的有些不太准确,一向注重用户体验的苹果公司定义这个最小点击尺寸也不是没根据的…… 所以现在做设计,为了图标精致,你可以把图标做的小一些,但是切图输出的时候,要考虑用户点击难易度的问题,所以,切图的时候,涉及到需要点击的小图标的时候,普通屏幕还是切44px大小,高清屏就需要切88px,不够的地方用透明区域补全,否则用户点击的时候会比较困难,会很不灵敏。⑥图片图标的不同状态 每种图标或者图片如果有不同状态,每一种不同的状态都需要进行切片输出。 比如按钮有正常(normal),按下(pressed),选中(selected),禁用(disabled)等多种状态,最常出现的就是normal→pressed→normal;某些特定按钮控件会出现选中状态,具体情况具体分析吧。这里显示的是你要知道按钮可能有几种状态…… 切片的命名规则 命名并不是统一的规范,不同的公司不同的工程师有着自己不同的命名规范和命名习惯,但是大致还是有迹可循的,一般是: 切片种类+功能+图片描述(可有可无)+状态.png 名称应使用英文命名(中文不识别,推荐小写字母),不要以数字或者符号当作开头,使用下划线进行连接。 举个例子:一个首页的处于正常状态的确定按钮 btn_sure_nor.png btn_sure_nor@2x.png 切片种类是按钮(btn);功能是确定(sure);状态是normal(正常)我通常是以这种命名方式进行命名,如果你的公司有设计文档,去看看之前留下的命名规范,如果没有,那就去问工程师吧。 Tab bar(底部栏) 说说Tab bar这里,因为比较特殊。 如果单纯的只有图标,自然是只切图标就好了; 早上和工程师沟通,这里该怎么切,工程师给的建议是 图标+文字的模式,图标最好单独切,文字后面程序加上去。 另外记住,同一模块的图标切片大小保持一致,上图的四个图标本身尺寸并不相同,但是切图的时候你需要切出相同尺寸的阴影大小,便于工程师开发使用。该怎么切图,还是要和你的工程师搭档去沟通一下; 以下是常用命名,这是我的命名习惯,并不是规范,所以要灵活,如果实在不知道英文,就用拼音代替也行。 Part 5 工作常用数据 你需要使用的字体: 如果是用Mac设计的小伙伴,直接就用苹果黑体字就好了;不过用Windows的就没那么幸运了,PC上还没和IPhone默认字体效果完全一样的字体,通常都是拿其他字体代替。苹果丽黑 Hiragino Sans GB W3(普通)/W6(粗体) 比较接近IPhone字体的一款字体,这是我之前一直使用的设计字体。 黑体-简 STHeitiSC-Light Mac里面拷出来的苹果黑体,比较贴近IPhone手机字体,目前在用。 我会把这两款字体上传,有需要可以下载。 关于字体大小的问题 顶部操作栏文字大小 34-38px 标题文字大小 28-34px 正文文字大小 26-30px 辅助性文字大小 20-24px Tab bar文字大小 20px 文字大小只是一个范围,这要根据设计的视觉效果来决定,不要死记硬背,但是切记,字体大小要用偶数。 你需要知道的IPhone设计尺寸(这里是一个整屏的尺寸包括了状态栏)320*480 IPhone3GS(我没见过3GS实体机,只在网上见过图片,但你需要知道这个尺寸)640*960 IPhone 4/4s(4时代的设计尺寸)640*1136 IPhone 5/5s/5c(5时代的设计尺寸,虽然现在出来6/6 plus,但还有人再用这个尺寸设计) 750*1334 IPhone 6(目前最新的设计尺寸,基本上现在做IOS的APP设计,用这个的应该最多)1242*2208 IPhone6 plus(这是标准分辨率,也就是设计需要的尺寸;另外还存在物理分辨率是1080*1920,这并不需要深入理解。plus还涉及到横屏,横屏是是没有状态栏的,设计横屏时可以参考IPad的设计模式) 你需要提交的启动页面 这是开发工具Xcode提供的LaunchImage(启动页面)的各项尺寸,不过好像现在已经改了,这还是工程师很久之前给我的,咋一看是不是吓一跳?工程师是按照IOS的系统版本来设置的,但你是设计师,你是按照IPhone的版本来作图的,所以其实没有那么多,真实情况下,我们的工程师要求提供以下几个尺寸: 640*960(4/4s)640*1136(5/5s/5c)750*1334(6)1242*2208(6 plus) 2208*1242(6 plus的横屏尺寸,如果你们的软件支持横屏模式,你就需要做一张横屏的启动页面)注意,启动页面一定要是PNG格式的 图标的提交尺寸 IOS系统可以自动把图片裁剪为圆角,所以提交图标的时候,你只需要提交正方形的PNG图片即可。 因为需要的图标非常多,不可能全部加进去,只能选择最好的尺寸,我们的工程师要求我提供以下图标尺寸: 1024*1024 Retina APP Icon for APP Store(高清屏的APP Store)512*512 APP Icon for APP Store(普通屏幕的APP Store)120*120 6的主屏幕尺寸 114*114 5/4s/4的主屏幕图标尺寸 57*57 3GS的主屏幕图标尺寸 58*58 Retina Settings图标尺寸 29*29 Settings图标尺寸 提交的图标尺寸不是固定的,所以,去找和你搭档的工程师,让他给你出一份需要提交的图标尺寸文档。 差不多用的到的就这些,有时间可以去查看一下苹果的IOS人机指导手册或者开发文档,上面有更加详细的数据说明。 但实际工作中需要的并不像手册上提供的尺寸那么多,所以工作之中,和你的工程师搭档去沟通,你要知道的是你们公司开发所用的数据,而不是苹果提供给你的数据。 本篇是之前五篇的汇总,保留的基本全是工作需要的东西,至于更多的感想以及我对设计现状的思考,以及一些下载素材,可以去看看其余的五篇文字以及番外,对你应该有些许帮助吧。 iOS教学大纲 C语言 教学目标:让学生掌握基本的编程思想,语言结构和常用经典算法。使学生具有基本的编程素养和思维。能够用c语言描述各类经典过程,记录各种数据。为之后的应用开发打好基础。1)C语法基础 a)常量、变量类型、变量 b)运算符:算术、关系、逻辑 c)分支语句 d)循环语句 e)数组 f)结构体 g)指针 h)函数 i)经典排序、选择算法 j)链表的概念和简单实现 Objective-C语言 教学目标:使学生熟练掌握OC语言特性和语法。系统训练学生面向对象编程思维,能够处理各种复杂问题。具有基本的处理复杂问题的解决能力。1)OC语法基础 a)类的声明与实现 i)类声明的关键字 ii)类实现关键字 b)成员变量和方法 i)成员变量访问权限 ii)方法类型 iii)方法名与参数 c)对象指针的创建与分配内存 i)内存分配,初始化 ii)定制初始化过程过程 d)属性机制 i)属性作用 ii)属性控制符 e)点语法 i)点语法规则 ii)点语法使用 f)self关键字 i)方法隐含参数 ii)self赋值过程 2)继承与复合 a)继承语法 b)消息动态路由 c)super关键字 3)字符串与集合 a)字符串 i)创建,复制 ii)截取,分割 iii)拼接 b)数据结构 i)概念 ii)关系型数据 iii)关系表现 c)数组和字典的基本使用 d)数组、字典和字符串的嵌套对数据的保存 e)JSON格式 4)内存管理-ARC a)ARC原理 b)ARC关键字的作用 i)Strong ii)Weak iii)Autoreleasing iv)Unseft__unretian c)强引用循环 i)出现原因 (1)相互强引用(2)间接强引用链 ii)避免方法 (1)使用weak打破强引用链 5)OC语言特性 a)类目 b)延展 c)协议 d)KVO(键值观察)、KVC(键值编码)e)单例模式 f)通知中心 6)模块化编程1 a)模块 i)模块概念 ii)模块化结构 iii)模块化开发 b)目标-动作回调 i)id类型 ii)SEL类型 c)委托模式回调 i)回调方法规范 ii)回调对象规范 7)模块化编程2 a)Block i)概念及用途 ii)定义方法 b)Block回调 8)模块化编程3 a)复杂模块 b)触发回调 i)触发目标的动作 ii)触发委托人方法 iii)触发Block对象 iOS App开发基础(原UI基础) 教学目标:快速高效的学习和使用大量ios原生控件满足视图设计需求。能够定制控件满足特殊需求。能够独立完成app的开发工作。1)App开发入门 a)系统启动流程 i)代码 ii)storyboard b)UIControl子类的使用 i)UIButton ii)… 2)系统组件 a)UIView b)UIView常用子类 3)视图布局 a)绝对布局 i)常用视图尺寸 ii)位置计算规则 b)相对布局 i)stroyboard设置约束 ii)代码设置约束 c)横竖屏变换 i)UIDevce获取设备信息 ii)UIScreem获取屏幕信息 d)视图控制器关键时间点 i)viewDidLoad ii)view相关 iii)视图朝向变换 4)视图结构 a)导航控制器 i)根视图控制器 ii)push与pop iii)bar月item b)页签控制器 i)自定义tabbar c)模态展示 d)视图层次 5)表视图 a)UITableView i)数据源 ii)委托回调 b)表视图控制器 c)静态cell d)多样式cell 6)数据持久化-CoreData a)CoreData的增删改查 b)NSFechedResultController的使用 c)表视图的增删改 7)网络编程 a)后台文档的阅读 b)创建请求 c)创建连接 d)解析数据 e)AFNetWork的使用 f)CocosPods的使用 8)应用事件及状态,手势,绘图 a)事件传递过程 b)事件响应过程 c)应用状态 d)状态切换 9)多线程 a)NSObject多线程方法 b)NSThred多线程 c)队列与操作 d)GCD iOS App开发专题(原UI高级) 教学目标:针对市面上流行app的常用功能模块的开发实现。使学生具有多个项目的核心解决方案。1)表视图搜索 a)UISearchDisplayController的使用 b)UISearchBar的使用 c)CoreData谓词的使用 2)新闻列表 a)下拉刷新 b)点击加载更多 3)图文混排(文字表情实现)a)TextKit框架 b)富文本的使用 c)添加链接 4)自定义键盘 a)表情键盘 b)功能键盘 c)键盘切换与高度获取 5)照片库 a)选取图片与视频 b)拍摄照片 c)录制视频 6)定位与位置服务 a)CoreLocation定位 b)使用新浪位置服务 7)音频录制播放 8)scrollView轮播与缩放 9)常用第三方 a)加密类 b)指示类 c)功能类 iOS App练习项目 教学目标:强化和练习学生处理问题的能力。1.通讯录 a)具有联系人增删改查功能 b)首字母自动分组功能 c)自定义头像功能 d)表视图索引 e)数据持久化 2.新浪微博 a)微博的展示与发送 b)展示有图片和无图片两类微博 c)具有显示表情功能 d)发微博可以发送表情和照片 e)可以转发和收藏微博 f)点击微博图片可以放大显示 3.Message a)使用xmpp通信协议进行即时通信 b)高仿微信聊天界面与功能 iOS 上线APP 真实项目,完整开发上架流程。 云计算专题 教学目标:使学生可以在云平台上搭建数据服务后台,对app进行联网数据支持。 1.云平台使用 a)SAE,新浪 b)BAE,百度 c)ECS,阿里云 2.云储存使用 a)Storage,新浪 b)七牛 c)OSS,阿里 3.PHP脚本 4.MySQL数据库 1.用#define定义一个宏,表示一年中的秒数。 @interface USER {NSSTring *name;} @end a)self.name=@”abc”与name=@”abc”的区别? b)self.name=[[NSSTring alloc]initWithString:@”abc”];中name的retainCount是多少? c)补全setName:(NSSTring *)myName方法 d)这里用self.name访问了name属性,还可以用别的方法访问name属 性么? 2.UITableView中什么可以自定义? 3.view.bounds和view.frame有什么区别? 4.iOS中是怎样进行内存管理的? 5.简述分类与继承的区别。 6.简述CALayer与UIView的区别。 7.简述堆与栈的区别。 8.简述Delegate、KVO和NotificationCenter区别。 9.用预处理指令#define声明MAX(X,Y)和MIN(X,Y)。 10.试写出strCompare 11.对于一个字节(8bit)的变量,求其二进制中“1”的个数,要求算法的执 行效率尽可能地高。 12.求两个正整数的最大公约数,要求算法的执行效率尽可能地高。 13.如何判断两个单向链表是否相交? 14.能不能找到符合如下条件的9位数: a)这个数包括了1-9这9个数字; b)这个9位数的前n位都能被n整除,若这个数表示为abcdefghi,则ab 可以被2整除,abc可以被3整除„„abcdefghi可以被9整除。 15.说说autorelease和release 的区别? 16.如何下载图片? 17.微博的认证? 18.版本扩展? 19.程序调试? 20..(点)运算符? 21.UITableView中每一行都缓存图片的处理,如何处理才能在滑动时不会出现等 待的现象。 22. 路由器及IOS简介 1.路由器简介 (1)CPU:中央处理单元,和计算机一样,它是路由器的控制和运算部件。 (2)RAM/DRAM:内存,用于存储临时的运算结果,例如,路由表、arp表、快速交换缓存、缓冲数据包、数据队列,以及当前配置。众所周知,RAM中的数据在路由器断电后是丢失的。 (3)FLASH:可擦除、可编程的ROM,用于存放路由器的IOS,FLASH的课擦除特性允许我们更新、升级IOS。而不是更换路由器内部的芯片。路由器断电后,FLASH的内容不会丢失。当FLASH容量较大时,可以存放多个IOS版本。 (4)NVRAM:非易失性RAM,用于存放路由器的配置文件,路由器断电后,NVRAM中的内容仍然保持。 (5)ROM:只读存储器,存储了路由器的开机诊断程序、引导程序和特殊版本的IOS软件(用于诊断等有限用途),当ROM中软件升级时需要更换芯片。 2.IOS简介 路由器也有自己的操作系统,通常称为IOS(internetwork operating system)。和计算机上的Windows一样,IOS是路由器的灵魂,所有配置是通过IOS完成的。 图1“show”命令现实路由器的各种信息 图2配置文件的流动 ROM FLASHTFTPROM CONSOLE 图3路由器启动过程示意图第二篇:IOS设计规范
第三篇:iOS教学大纲
第四篇:iOS面试题整理
第五篇:路由器及IOS简介