iOS音乐播放器(三稿)_第1页
iOS音乐播放器(三稿)_第2页
iOS音乐播放器(三稿)_第3页
iOS音乐播放器(三稿)_第4页
iOS音乐播放器(三稿)_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 信 息 科 学 与 技 术 学 院 学 士 学 位 论 文 JIU JIANG UNIVERSITY毕 业 论 文 题 目 iOS音乐播放器 英文题目 iOS MusicPlayer 院 系 信息科学与技术学院 专 业 计算机科学与技术 姓 名 吴传东 班级学号 A111146 指导教师 杨潇 二一五年五月36目 录目 录1摘 要3Abstract41 绪论51.1课题来源及研究背景51.2 开发目的及意义51.3 课题研究内容51.4 论文的组织与结构62 相关技术概述72.1系统架构及开发环境简介72.2 音乐播放器应用控件及组件介绍72.3 音乐播放器的生命周期92.4 音乐播放器应用

2、技术的介绍102.5本章小结103 需求与分析113.1 可行性需求分析113.2 UI需求分析133.3 功能需求分析143.4 存储操作需求分析153.5 本章小结164 系统设计184.1 UI设计184.2 功能设计184.3 存储操作204.4 本章小结215 系统实现235.1 UI实现235.2 功能实现235.3 存储操作实现265.4 本章小结276 软件测试296.1 兼容性测试296.2 功能测试306.3 本章小结337 总结与展望347.1 总结347.2 展望34致 谢35参考文献36摘 要针对iOS系统上的一款音乐播放器程序进行设计与实现讨论。该音乐播放器实现了上

3、一首,下一首,音量调节,歌词同步,播放模式的切换,快进快退等基本功能,还实现了对网络歌曲的分类获取及在线实时播放。目前苹果手机大热,在全世界火热销售,年轻人以拥有一台属于自己的苹果手机为傲。在这个大环境下学习苹果软件开发,是年轻人非常不错的选择。所以开发一款音乐播放软件非常具有市场前景。这款音乐软件中有我完成了系统设计,系统架构,UI界面设计,以及最后的软件测试等工作。关键词 iOS; objectC;音乐播放器AbstractAgainst the the music player program in the system of ios carried out the Design and

4、 Implementation of discuss. the basic functions of the switch to playback mode, fast forward and rewind, but also to achieve the classification of the songs on the network access and on-line real-time playback. The apple mobile phone, hot sell all over the world, young people to have a proud of thei

5、r own iphones. In this environment learning apple software development, is a young man is very good choice. So I developed this kind of music player softwareHave I done in this music software system design, system architecture, UI interface design, and the final software testing, etc.Keywords the iO

6、S; object-C; music player1 绪论1.1课题来源及研究背景当今社会的生活节奏越来越快,人们对手机的要求也越来越高,由于手机市场发展迅速,使得手机操作系统也出现了不同各类,现在的市场上主要有三大手机操作系统,Windows phone,Android,以及iOS操作系统,其中iOS系统有很大的发展前景。那么能否在手机上拥有自己编写的个性音乐播放器呢,本文的音乐播放器就是基于iOS手机平台的播放器。1.2 开发目的及意义 现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一。随着人们的生活水平越来越高,人们对音乐的需求也越来越高,而传统的音乐播放器又限于手机内存,在音

7、乐的分类和管理上有着很大的局限性。本设计 的实现的是对音乐能够控制播放,暂停,停止,上一曲,下一曲,音量调节,视觉外观,播放列表和歌曲文件的管理操作等多种播放控制功能,界面简明,操作简单。添加了对网络音乐的支持,使得手机只需要联网就会瞬间拥有百万首歌曲,不必在局限于手机内存。丰富的歌曲分类功能,使得繁多网络歌曲的管理,更加的仅仅有条。这样就打破的传统播放器内存的限制,是人们能够享受到更加丰富的歌曲。本项目是一款基于iOS手机平台的音乐播放器,使iOS手机拥有个性的多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。使人们的生活更加多样化。也使设计者更

8、加熟练iOS的技术和其它在市场上的特点。1.3 课题研究内容 本系统紧跟当前移动手机开发趋势,使用Objective-c语言开发一个基于iOS平台的音乐播放娱乐系统,实现基于iOS平台的音乐播放娱乐系统的基本功能。歌的切换以及列表显示,在听歌的同时能够娱乐1.4 论文的组织与结构第一章为绪论,介绍了本文的选题背景和意义,总结国内外音乐播放器研究现状,同时对论文研究内容安排进行阐述。第二章对系统中涉及的相关理论和关键技术进行了研究,对Objective-C开发语言、iphone手机系统和Mac OS相关技术进行了介绍和分析。第三章对系统进行研究,阐述了系统的功能和性能和UI界面的设计和实现。第四

9、章在前面三章基础上研发出iPhone的音乐播放软件,同时,对系统各模块设计和实现进行分析,其中对关键技术给出了详细实现过程。最后是论文的总结。2 相关技术概述2.1系统架构及开发环境简介开发iOS软件需要使用苹果官方发布的Xcode工具软件,Xcode软件目前已更新到第6版本,是一款相当强大的开发工具。使用Xcode我们将按图2-1来实现播放器的功能。用户基本操作播放暂停上一首下一首快进快退播放模式单曲循环顺序播放随机播放 图2-1播放器功能图2.2音乐播放器应用控件及组件介绍开发iOS软件使用OC语言,并使用苹果公司所开发集成的Xcode软件,开发音乐播放器需使用到下列方法。System S

10、ound ServicesSystem Sound Services 是最底层也是最简单的声音播放服务,调用AudioServicesPlaySystemSound这个方法就可以播放一些简单的音频文件,使用此方法只适合播放一些很小的提示或者警告音,因为它有很多限制:如:声音长度要小于 30 秒、In linear PCM 或者 IMA4 (IMA/ADPCM) 格式的打包成 .caf, .aif,或者 .wav 的文件、不能控制播放的进度、调用方法后立即播放声音、没有循环播放和立体声控制,另外,它还可以调用系统的震动功能,方法也很简单。具体的代码可以参考官方的示例 SysSound,

11、但是官方的示例只有一些简单的用法,从文档中我们发现可以通过AudioServicesAddSystemSoundCompletion方法为音频播放添加CallBack函数,有了CallBack函数我们可以解决不少问题,比如可以克服 System Sound Services 本身不支持循环播放的问题。AVAudioPlayer类AVAudioPlayer是AVFoundation.framework中定义的一个类,所以使用要先在工程中引入AVFoundation.framework。我们可以把AVAudioPlayer看作是一个高级的播放器,它支持广泛的音频格式,主要是以下这些格式:AAC、A

12、MR(AdaptiveMulti-Rate, aformatforspeech)、 ALAC(AppleLossless)、iLBC(internetLowBitrateCodec, anotherformatforspeech)、 IMA4(IMA/ADPCM)、 linearPCM(uncompressed)、 -lawanda-law、 MP3(MPEG-1audiolayer3 。Audio Queue Services如果以上两种音频播放的解决方案都无法满足你的需求,那么我想你肯定需要使用 Audio Queue Services。使用 Audio Queue Servic

13、es 对音频进行播放,你可以完全实现对声音的控制。例如,你可以在声音数据从文件读到内存缓冲区后对声音进行一定处理再进行播放,从而实现对音频的快速/慢速播放的功能。MPMusicPlayerController有两种播放器可以选择,一种是applicationmusicplayer,另外一种是iPodmusicplayer。第一种播放器是一种内部播放器,当程序对出后停止播放;而第二种播放器则与iPod播放器内的信息相关,退出之后不会停止播放。在播放之前需要设置队列。MPMoviePlayerController MPMoviePlayerController 与AVAudioPlayer有点类似

14、,前者播放视频,后者播放音频,不过也有很大不同,MPMoviePlayerController 可以直接通过远程URL初始化,而AVAudioPlayer则不可以。不过大体上用起来感觉差不多。格式支持:MOV、MP4、M4V、与3GP等格式,还支持多种音频格式2.3音乐播放器的生命周期音乐播放器行业市场供给分析及市场供给预测包括现在音乐播放器行业市场供给量估计量和预测未来音乐播放器行业市场的供给能力。音乐播放器行业市场需求分析及音乐播放器行业市场需求预测包括现在音乐播放器行业市场需求量估计和预测音乐播放器行业未来市场容量及产品竞争能力。通常采用调查分析法、统计分析法和相关分析预测法。音乐播放器

15、行业市场需求层次和各类地区市场需求量分析即根据各市场特点、人口分布、经济收入、消费习惯、行政区划、畅销牌号、生产性消费等,确定不同地区、不同消费者及用户的需要量以及运输和销售费用。音乐播放器行业市场竞争格局包括市场主要竞争主体分析,各竞争主体在市场上的地位,以及行业采取的主要竞争手段等;估计音乐播放器行业产品生命周期及可销售时间即预测市场需要的时间,使生产及分配等活动与市场需要量作最适当的配合。通过市场分析可确定产品的未来需求量、品种及持续时间;产品销路及竞争能力;产品规格品种变化及更新;产品需求量的地区分布等。音乐播放器行业市场分析报告可为客户正确制定营销策略或投资策略提供信息支持。企业的营

16、销策略决策或投资策略决策只有建立在扎实的市场分析的基础上,只有在对影响需求的外部因素和影响购、产、销的内部因素充分了解和掌握以后,才能减少失误,提高决策的科学性和正确性,从而将经营风险降到最低限度。2.4 音乐播放器应用技术的介绍Objective-C是非常实际的语言。它是一个用C写成、很小的运行库,只会令应用程序的尺寸增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。Objective-C写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。因此,Objective-C它完全兼容标准

17、C语言(C+对C语言的兼容仅在于大部分语法上,而在ABI(Application Binary Interface)上,还需要使用extern "C"这种显式声明来与C函数进行兼容),而在此基础上增加了面向对象编程语言的特性以及Smalltalk消息机制。Xcode最新版本是Xcode 6,整合了苹果在WWDC大会上发布的新语言Swift。2.5本章小结苹果iOS是由苹果公司开发的手持设备操作系统。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad以及Apple TV等苹果产品上

18、。使用苹果电脑开发苹果软件,在Xcode上使用OC语言开发音乐播放软件。3需求分析3.1 可行性需求分析使用Objective-C编程技术需求可行性分析 Objective-C是C语言的面向对象扩展,可以将其称为“带有对象的C”。相对于其他面向对象语言,Objective-C更加容易学习。 动态绑定函数和消息的最根本不同是:函数和它的参数是在编译的时候已经确定下来,但是消息和接收对象知道程序已经在运行,消息在传递时才能确定下来。确切的消息方法实现依赖于消息的接收者,不同的接收者可能有相同的方法名不同的方法实现.运行时消息例程查找接收者和消息方法,找到消息方法实现的机器码,呼叫这个方法,传递给它

19、消息实例变量指针。多态性在Objective-c中消息的调用看上去和标准C中的函数调用相似,但因为方法属于一个对象,消息的行为与函数调用还是不同,在一些情况下,一些对象仅能对针对它涉及的方法起作用。这意味着两个对象对同样的消息有着不同的响应,即多态性。Objective-c中多态性和动态绑定配合使用,可以使代码提供给任意数量不同类型的对象使用,这些对象不需要再写代码的时候就已经定义好,它们可以是以后开发的对象,也可以是其他项目的对象。面向对象 面向对象程序构建在多种对象之上,基于Cocoa框架的程序可能使用NSMatrix对象、NSWindow对象、NSDirectonary对象、NSFont

20、对象以及许多其它对象。在Objective-c中通过定义类来定义对象。面向对象让开发者更容易开发应用程序软件,以及更加规范化。 继承性 类的定义是累进的,任个新类都是在另一个类的基础上定义的,新类继承了它的方法和实例变量。继承使所有的类构成一颗树形的结构,在Objective-c中使用类一般要继承于基类:NSObject,因为NSObject提供了大量的有用特性。比如,一些图形类,需要继承于Shape类,而Shape是Graphic类的子类,Graphic又继承于NSObject类,因此,还是间接继承于NSObject类。类的继承关系图3-1所示:NSObjectGraphicImageTex

21、tShapeLineRectangleCircleSquare图3-1 Objective-C类继承图1.使用工具方面:开发环境为xcode 62.操作系统方面:使用mac 10.8操作系统。3.硬件可行性一台已经安装有所有必备的软件及相应软件设备的计算机;内存要求大于或等于2G。.社会因素和市场因素可行性. 如今社会发展迅速,每个人都不再满足于功能单一的音乐播放器,越多倾向于娱乐性能完备的音乐播放系统。用户对在听音乐的同时还可以 按照目前市场情形,越来越多的移动开发者涌进iOS开发领域。iOS平台上应用软件,App Store的支付模式更为成熟而且有监管,另外iOS的兼容性问题小,开发人员不

22、用考虑太多的配置兼容问题,美观大方的外形,更是吸引了用户。而且其良好的用户体验,都为iOS的发展奠定了良好的基础。该音乐播放系统,可以在听歌的同时玩本地小游戏,给用户极好的娱乐效果。3.2 UI需求分析软件界面是人与计算机之间的媒介。用户通过软件界面来与计算机进行信息交换。因此,软件界面的质量,直接关系到应用系统的性能能否充分发挥,能否使用户准确、高效、轻松、愉快地工作,所以软件的友好性、易用性对于软件系统至关重要。目前国内软件开发者在设计过程中很注重软件的开发技术及其具有的业务功能,而忽略了用户对软件界面的需求,影响软件的易用性、友好性;对界面设计的研究也集中在界面设计技术、设计手段上面。软

23、件开发人员在设计时以经验为参考依据,缺乏对实际用户需求的了解。而软件的友好性、易用性同用户特征紧密相联,同样的软件界面,不同用户可能有绝然相反的评价。因此分析用户特征、了解用户需求和操作习惯,是开发软件界面的必有步骤,必须引起足够重视。 本文讨论了一种界面需求分析的方法,意在探讨研究如何完成针对系统所有用户的界面需求定义,从而开发为用户所接受的界面。讨论该方法的目的在于帮助设计人员快速明确用户的界面需求,让用户充分参与到界面需求分析中,从而在最终界面需求说明中体现用户的思想,满足用户要求。3.3 功能需求分析根据系统功能划分,本系统详细需求描述如下:1音乐播放功能需求 为了给用户最好的用户体验

24、,本功能模块实现mp3音乐文件的播放,歌曲的切换,音乐的暂停,音乐的开始,歌曲图片的显示,音量的调整,随意拖动滚动条来播放音乐等。2音乐播放列表功能需求 该模块实现的是音乐信息的管理,包括播放哪一个音乐, 本地音乐播放列表的显示,所有的音乐信息等等。3在线搜索音乐功能需求 该模块实现的是使用网络API来在线搜索音乐,还包括搜索结果的正确显示等等。4在线音乐下载功能需求该模块实现的是将通过网络API搜索到的音乐下载到本地,并显示下载列表。 播放界面要布局合理,颜色舒适。界面为了体现简洁,方便的特点,主要使用了tab bar分为3大类,分别对应着网络,本地及设置模块。在各个播放列表中,都有一个按钮

25、,用于返回正在播放的界面,这样,对于用户操作来说是十分方便的。3.4 存储操作需求分析基本原理 OC 在创建对象时,不会直接返回该对象,而是返回一个指向对象的指针,因此出来基本类型以外,我们在 OC 中基本上都在使用指针。 ClassA *a = ClassA alloc init; 在ClassA alloc的时候,已经发送消息通知系统给 ClassA 的对象分配内存空间,并且返回了指向未初始化的对象的一个指针。未初始化的 ClassA 对象接手到 init 消息,init迒回指向已初始化后的 ClassA 对象的一个指针,然后将其赋值给变量 a。在创建并使用完一个对象的时候,用户需要手动地

26、去释放该对象。如果指针 a 和 b 同时指向堆中同一块内存地址 ClassA *a = ClassA alloc init;ClassA *b = a; a dealloc; 当执行到第三行的时候,指针b 就成了无头指针。返回是一个在 C+中也是常见的错误,我们需要避免返类错误,因为无头指针是危险的。内存泄露:就如上面列子所示,当生成 ClassA 对象时,指针 a 拥有对该对象的访问权。如果失去了对一个对象的访问权,而又没有将 retain count 减至 0 ,就会造成内存泄露。也就是说,分配出去的内存无法回收。 Autorelease Pool 为了方便程序员管理内存,苹果在 OC 中

27、引入了自动释放池(Autorelease Pool)。在遵守一些规则的情况下,可以自动释放对象。但即使有返回这么一个工具,OC 的内存仍需要程序员时刻关注 。 Autorelease Pool 的原理: autorelease pool 全名叫做 NSAutoreleasePool ,是OC 中的一个类。autorelease pool并不是天生就有的,你需要手动的去创建它: NSAutoreleasePool *pool = NSAutoreleasePool alloc init; 一般地,在新建一个 iphone 项目的时候,xcode 会自动地为你创建一个 autorelease po

28、ol ,返回 pool 就写在 Main 函数里面。在 NSAutoreleasePool 中包含了一个 可变数组,用来存储被声明为 autorelease 的对象。当NSAutoreleasePool 自身被销毁的时候,它会遍历返个数组,release 数组中的每一个成员(注意,返里另是 release ,并没有直接销毁对象)。若成员的retain count 大于 1 ,那么对象没有被销毁,造成内存泄露。 手动管理内存 使用 alloc、new、copy 创建一个对象,该对象的 retain count 都等于 1 ,需要用release 来释放该对象。谁创建,谁去释放。在返 3 钟方法以

29、外的方法创建的对象,都被系统默认的声明为autorelease。 ClassA *a = ClassA alloc init;ClassA *b = a; b retain; b release; b = nil; 把一个指针赋值给另外一个指针的时候,a 指针所指向的对象的引用次数并没有增加,也就是说,对象的 retain count 依然等亍 1。叧有在retain 了之后,retain count 才会加 1。那么,如果返时候执行a release ,另是a 指针放弃了对对象的访问权,对象的 retain count 减 1 ,对象没有被销毁。另有当 b 也执行了 release 方法之后

30、,才会将对象销毁掉。3.5 本章小结"需求分析",是指对要解决的事情进行详细的分析,弄清楚事情的要求,包括需要输入什么date,要得到什么结果,最后应输出什么。可以说,在软件工程当中的“需求分析”就是确定要计算机“做什么”,要达到什么样的效果。可以说需求分析是做系统之前必做的。在音乐播放器中,需求分析指的是在建立一个新的或改变一个现存的描写新系统的目的、范围、定义和功能时所要做的所有的工作。需求分析是软件工程中的一个关键过程。在这个过程中,系统分析员和软件工程师确定顾客的需要。只有在确定了这些需要后,他们才能够分析和寻求新系统的解决方法。需求分析阶段的任务是确定软件系统功能

31、。4 系统设计 4.1 UI设计音乐播放器的UI即User Interface(用户界面)的简称。UI设计是指对音乐播放软件的人机交互、操作逻辑、界面美观的整体设计。好的UI设计不仅是让播放器变得有个性有品位,还要让播放器的操作变得舒适简单、自由,充分体现软件的定位和特点。音乐播放软件设计可分为两个部分:编码设计与UI设计。UI的本意是用户界面,是英文User和 Interface的缩写。从字面上看是用户与界面2个部分组成,但实际上还包括用户与界面之间的交互关系。在飞速发展的电子产品中,界面美化设计工作一点点的被重视起来。做界面设计的“工程师”也随之被称之为“ “UI工程师”。其实软件界面设计

32、就像工业产品中的工业造型设计一样,是产品的重要卖点。一个好的电子产品拥有美观的界面会给人带来舒适的视觉享受,拉近人与商品的心理距离,是建立在科学性之上的漂亮的艺术设计。检验一个音乐播放器界面的标准既不是某个项目开发组领导的意见也不是项目成员投票的结果,而是终端用户的感受4.2 功能设计1.简洁性界面的简易是要让用户方便使用、容易了解产品,且能减少用户发生错误选择的可能性。2.记忆消耗最小化人脑不是电脑,在设计界面时必须要考虑人类大脑处理信息的限度。人类的短期记忆有限且极不稳定,24小时内存在约25%的遗忘率。所以对用户来说,浏览信息要比记忆更容易。3同一性它是每一个优秀界面都具备的特点。界面的

33、结构必须清晰且一致,风格必须与产品内容相一致。4清楚在视觉效果上便于理解和使用。5用户的熟悉程度用户可通过已掌握的知识来使用界面,但不应超出一般常识。6从用户习惯考虑想用户所想,做用户所做。用户总是按照他们自己的方法理解和使用。通过比较两个不同世界(真实与虚拟)的事物,完成更好的设计。如:书籍对比竹简。7.安全性用户能自由的作出选择,且所有选择都是可逆的。在用户作出危险的选择时有信息介入系统的提示。8.灵巧性简单来说就是要让用户方便的使用,但不同于上述。即互动多重性,不局限于单一的工具(包括鼠标、键盘或手柄、界面)。4.3 存储操作苹果一直没有强调的一点是,关于属性中的 retain。事实上,

34、属性中带有retain 的,在赋值的时候可能已经在合成的 setter 中retain 了一次,因此,返里也需要 perty 实际上是 getter 和 setter ,synthesize 是合成返 2 个方法。为什么在声明了属性之后可以用“.”来直接调用成员变量呢?那是因为声明属性以后系统根据你给的属性合成了一个 set 方法和一个 get 方法。使用“.”属性并没有直接关联,如果你不嫌麻烦,在你的程序里面多写一个 set 和 get 方法,你也可以使用“.”来调用变量。property(),如果你里面什么都不写,那么系统会默认的把你的属性设置为: property(

35、atomic, assign). 关于 nonatomic:返个属性没有对应的 atomic 关键字,即使我上面是返么写,但 atomic 是在你没有声明返个特性的时候系统默认,你无法主动去声明返一特性。如果你的程序另有一个主线程,戒者你确定你的程序不会在 2 个或者以上线程运作的时候访问同一个变量,那么你可以声明为 nonatomic。指定nonatomic 特性,编译器合成访问器的时候不会去考虑线程安全问题。如果你的多个线程在同一时间会访问到返个变量的话,可以将特性声明为 atomic(通过省略关键字 nonatomic)。在返种特性的状态下,编辑器在合成访问器的时候就会在访问器里面加一个

36、锁(synchronized ),在同一时间叧能有一个线程访问该变量。 但是使用锁是需要付出代价的,一个声明为 atomic 的属性,在设置和获取返个变量的时候都要比声明为 nonatomic 的慢。所以如果你丌打算编写多线程代码,最好把变量的属性特性声明为 nonatomic。 关于assign、retain 和 copy : assign是系统默认的属性特性,它几乎适用于OC 的所有变量类型。对亍非对象类型的变量, assign 是唯一可选的 特性。但是如果你在引用计数下给一个对象类型的变量声明为 assign ,那么你会在编译的时候收到一条来自编译器的警告。因为 assign 对亍在引用

37、计数下的对象特性,另创建了一个弱引用(也就是平时说的浅复制)。返样使用变量会很危险。当你 release 了前一个对象的时候,被赋值的对象指针就成了无头指针了。因此在为对象类型的变量声明属性的时候,尽量少使用 assign。 关于 assign 合成的 setter ,看起来是返样的: - (void)setObjA:(ClassA *)a objA = a; 在深入 retain 之前,先把声明为 retain 特性的 setter 写出来: - (void)setObjA:(ClassA *)a If(objA != a) objA release; objA = a; objA reta

38、in; /对象的 retain count 加 1 明显的,在retain 的 setter 中,变量retain 了一次,那么,即使你在程序中self.objA =a;另写了返么一句,objA 仍然需要 release ,才能保证对象的retain count 是正确的。但是如果你的代码objA =a;另写了返么一句,那么返里叧是迕行了一次浅复制,对象的 retain count 并没有增加,因此返样写的话,你不需要在后面 release objA。返 2 句话的区别是,第一句使用了编译器生成的 setter 来设置 objA 的值,而第二句叧是一个简单的指针赋值。copy 的 setter

39、 看起来是返样的: - (void)setObjA:(ClassA *)a ClassA * temp = objA; objA = a copyWithZone:nil; temp release; 复制必须通过实现copyWithZone :返个方法,因次copy返个特性另适用于拥有返个方法的类型,也就是说,必须返个类支持复制。复制是把原来的对象 release 掉,然后让指针指向一个新的对象的副本。因此即使在 setter 里面 release 了原来的对象,你仍然需要在后面 release 新指向的对象4.4 本章小结UI是用户界面,是英文User和 interface的英文缩写。从字

40、面上看是使用者与界面2个组成部分,但实际上还包括用户与界面之间的交互关系。用户研究技术是站在人文学科的角度来研究产品,站在用户的角度介入到产品的开发和设计中。用户研究通过对于用户的工作环境、产品的使用习惯等研究,使得在产品开发的前期能够把用户对于产品功能的要求加大、对设计和外观方面的要求融入到产品的开发过程中去,从而帮助企业完善产品设计或者探索一个新产品概念。这部分指人与机之间的交互工程,在过去交互设计也由程序员来做,其实程序员擅长编码,而不善于与最终用户交互。所以,很多的软件虽然功能比较齐全,但是交互方面设计很粗糙,繁琐难用,学习困难。使用这样的软件后,不是使人聪明与进步而是让人感到愚弄与羞

41、辱。许多人因为不能操作电脑软件而下岗失业,这样的交互使电脑成为让人恐惧的科技怪兽。于是我们把交互设计从程序员的工作中分离出来单独成为一个学科,也就是人机交互设计的快感。在漫长的软件发展中,界面UI设计工作一直没有被重视起来。做界面设计的人也被贬义的称为“美工”。其实软件界面设计就像工业产品中的工业造型设计一样,是产品的重要买点。一个友好美观的界面会给人带来舒适的视觉享受,拉近人与电脑的距离,为商家创造卖点。界面设计不是单纯的美术绘画,他需要定位使用者、使用环境、使用方式并且为最终用户而设计,是纯粹的科学性的艺术设计。所以界面设计要和用户研究紧密结合,是一个不断为最终用户设计满意视觉效果的过程。

42、5 系统实现5.1 UI实现播放器播放界面功能实现图 5-1 播放器主界面5.2 功能实现播放进度的跟踪显示在播放音乐的时侯,我们希望可以看到播放的进度,通过拉动进度条来方便快捷的实现对歌曲的快进,快退的功能。通过创建一个计时器,利用计时器来实时更新进度条。图5-2 播放进度而进度条的进度显示是用UISlider 控件控件。其value的值为0到1,利用正在播放的时间与一共的时长之比来控制UISlider的值,达到进度条的跟着显示。UISlider具有一个change事件,可以改变value的值来设置当前播放的一个进度,来达到一个快进,快退的功能。歌词的同步显示有了以上功能,对歌词的显示以上一

43、个必不可少的功能。即是以“时间+歌词”的格式存储。那么歌词的显示形式主要是通过播放的时间与歌词显示的时间相对比,如果一致则显示。因此,通过将歌词和时间分别用两个数组装入,当正在播放的时间与数组中某个时间相对应的时侯,显示出当前的歌词。界面上的显示方式主要是通过UILable来显示的。有的人不喜欢一句一句的看歌词,想看更多的歌词,那么就加入了全屏歌词的显示。全屏显示的歌词采用的是将所有的歌词装入可变字符串,并对每一句添加分隔符,装入UItextView中,通过正在播放时间与歌词的时间对比,来调整UItextView内容的高度。而textview具有着滑动的动画效果,使得整个歌词上移的效果更加平滑

44、。播放列表功能图5-3 音乐榜单播放列表主要采用了表示图:UITableView来进行显示。这样可以更加直观,更加方便的显示数据。可以通过设置它的代理UITableViewDelegate。实现的主要形式是:设置tableView的组件为1个:numberOfSectionsInTableView:,设置行数: numberofRowsInSection:,设置每行的内容:cellForRowAtIndexPath。当点击的时侯会出发didselect事件,实现歌曲的播放。缓存歌曲访问Iphone的应用程序都是在沙盒中运行的。其文件访问仅限于document目录下,所以对与本地歌曲的访问也仅限

45、于document目录下arrayWithContentsOfFile:方法获取目录下的文件路径。对于需要播放播放的歌曲,可以将文件路径传给播放器,就可以进行播放了。搜索功能 图5-4 搜索列表网络歌曲的搜索对于快速查找到自己想找的歌曲是十分有必要的。这里选择的歌曲搜索库是来至于网络的。比如我们选择一首叫滴答的歌曲。只需要使用ASIHTTPRequest来请求5.3 存储操作实现实体联系模型主要是由实体、属性以及实体之间的联系组成12。通过对现实世界的概念模型的抽象,确立实体为歌曲、歌词、用户。根据音乐播放器的功能需求的分析结果,得出数据库的E-R图5-5如下所示:图5-5 歌曲E-R图根据数

46、据字典中的数据存储、数据流、处理逻辑、实体的属性及以上数据库设计中的概念结构设计模型,建立相关表进而得到数据库的逻辑结构设计,即数据库表。点击歌曲下载按钮如图5-6所示 图5-6开始下载如图5-7所示图5-7下载完成如图5-8所示图5-85.4 本章小结在进行UI设计时需要充分考虑布局的合理化问题,遵循用户从上而下,自左向右浏览、操作习惯,避免常用业务功能按键排列过于分散,以造成用户鼠标移动距离过长的弊端。多做“减法”运算,将不常用的功能区块隐藏,以保持界面的简洁,使用户专注于主要业务操作流程,有利于提高软件的易用性及可用性,实现播放器的界面设计需要考虑到界面的美观性与代码的简洁性。6 软件测

47、试6.1 兼容性测试测试任何产品都有两种方法:如果已经知道了产品应该具有的功能,可以通 过测试来检验是否每个功能正常使用;如果知道了产品的内部工作过程,可以通过测试来检测产品内部动作是否按照说明书的规定正常工作.前一种称为黒盒测 试又称功能测试,后一种方法称为白盒测试又称结构测试. 在测试本系统时,采用的是白盒测试来设计测试用例,而且在测试过程中, 由于条件原因,不能完全按照测试规则由第三方来测试,测试过程和方案设计由作者完成。测试的项目主要的功能性测试有:获取网络播放列表及播放本地播放列表及Ipod库音乐的读取及播放播放不同音乐时保证当前播放的只有一个音量控制的实现及播放的快进和快退功能的实

48、现歌词正常显示歌曲三种播放模式的实现歌曲搜索功能的实现功能菜单各功能实现测试环境装有最新Xcode苹果软件开发平台的Macbook电脑。6.2 功能测试首先,打开软件并且保证当前网络畅通,点击歌曲分类进去网络播放列表,查看是否存在网络播放列表。如图6-1所示图6-1 网络歌曲列表通过点击李宇春进入新歌播放列表,发现存在网络歌曲播放列表,选择一首进行播放,进入播放播放界面,查看是否可以正常播放。如图6-2所示图6-2 正在播放列表点击进入查看,可以看到存在刚下载的歌曲,选择另一首进行播放,进入正在播放的界面,可以看到进度条,事件等重置,当前播放的歌曲变成了刚选择的歌曲。如图6-3所示图6-3正在播放点击tabbar进入功能设置模块,默认的设置是图片和歌词的下载是允许的,可以先选择一首歌曲播放,可以看到有歌手的图片,下面歌词显示的地方有歌词出现,并且是与歌曲是对应的。向左滑动屏幕可以看到全屏的歌词,并随着歌曲的播放,向上滑动,正在播放的歌词是显示在中间,可以看到这也是同步的。如图6-4图6-5所示图6-4 歌词图6-5全屏歌词现在关闭歌词和图片这两个功能,再次选择一首歌曲进行播放,现在可以看到没有歌词显示了。如图6-6所示图6-6正在播放(无图片和歌词)6.3 本章小结在音乐播放软件模块,测试音乐播放是否流畅,是否能正常切换歌曲,是否能够快进歌曲播放,是否能调整

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论