切分语句

软件project的一条定律是数据和代码分离。这样做会使代码更易于測试,即使输入的数据发生改变,你的代码也能够同意。甚至于,程序能在执行中实时下载新的数据。假设程序能在执行中下载新书岂不是更好?

你如今用的书是用 Book.testBook 方法中的代码创建的。接下来我们将书改为以文件形式存储,读取的时候则通过Plist 文件来读取。

打开 SupportingFiles\WhirlySquirrelly.plist ,其内容例如以下:

你还能够通过右键->“Open As\Source Code”来查看其源代码:

];

// 3

for (NSDictionary *utteranceAttributes in [attributes objectForKey:RWTPageAttributesKeyUtterances]) {

// 4

NSString *utteranceString =                  [utteranceAttributes objectForKey:RWTUtteranceAttributesKeyUtteranceString];

NSDictionary *utteranceProperties =                      [utteranceAttributes objectForKey:RWTUtteranceAttributesKeyUtteranceProperties];

// 5

AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:utteranceString];

// 6

[utterance setValuesForKeysWithDictionary:utteranceProperties];

if (utterance) {

// 7

[utterances addObject:utterance];

[displayText appendString:utteranceString];

}

}

// 8

page.displayText = displayText;

page.backgroundImage = [UIImage imageNamed:[attributes objectForKey:RWTPageAttributesKeyBackgroundImage]];

}

return page;

}

这段代码负责:

  1. 处理 RWTBook.testBook 调用情况,这样的情况下,page 的 utterances 属性是一个 NSString。设置 displayText 和 backgroundImage 属性。
  2. 处理 book 数据来自 WhirlySquirrelly.plist  的情况,这样的情况下,page 的 utterances 是一个 NSArray 。将全部 utterances 和 display Text 合并。
  3. 遍历 page 中的每一个 utterances 。
  4. 读取每一个 utterances 的 utteranceString 和 utteranceProperties。
  5. 创建一个 AVSpeechUtterance 用于朗读 utteranceString。
  6. 通过键值编码(KVC)来改动 AVSpeechUtterance 实例属性。尽管苹果未在文档中说明,但能够调用 AVSpeechUtterance 的 setValuesForKeysWithDictionary:方法来设置全部 utteranceProtperties 属性。也就是说,你能够向 plist 中增�新的 utterance 属性,而不须要调用其 setter 方法,setValuesForKeysWithDictionary:方法会自己主动处理新属性。当然,在 AVSpeechUtterance 中对应的属性必须存在并且是可写的。
  7. 累加 utterance 并显示文本。
  8. 设置要显示的文本和背景图片。

编译执行,听听都在说些什么。

怎样使用 iOS 7 的 AVSpeechSynthesizer 制作有声书(2)的更多相关文章

  1. 怎样使用 iOS 7 的 AVSpeechSynthesizer 制作有声书(1)

    原文: http://www.raywenderlich.com/64623/make-narrated-book-using-avspeechsynthesizer-ios-7 随着 PageVie ...

  2. 怎样使用 iOS 7 的 AVSpeechSynthesizer 制作有声书(3)

    plist 中的每一页 utteranceSting 我们都创建了一个RWTPage.displayText.因此,每页的文本会一次性地显示出来. 由于 You've constructedeach ...

  3. 如何使用 iOS 7 的 AVSpeechSynthesizer 国家有声读物(4)

    控制:我们一定要学会控制 尤达大师(电影<星球大战>)有话:的关键在于控制.这本故事书是一个字一个字读出来,我愿意为它添加两个button,音调和语速,以便我们能够调整语音合成实时的时候. ...

  4. iOS静态库的制作与引用

    [iOS静态库的制作与引用] 1.Configuring Exported Headers To configure which headers are exported to clients, se ...

  5. iOS企业应用Profile制作流程

    第一步:企业版iDP申请完成以后,访问iOS Dev Center:https://developer.apple.com/devcenter/ios/index.action 第二步:点击Log I ...

  6. iOS自定义控件教程:制作一个可重用的旋钮

    当你的APP需要一些新功能时,自定义UI控件会十分有用,尤其是这些自定义控件可以在其他APP里面很好的重用.Colin Eberhart写过一篇很棒的介绍自定义UI控件的教程.这个教程涉及的是一个继承 ...

  7. iOS 静态库的制作

    按照公司的想法 要开发一款SDK,于是就抽空学习一下静态枯的制作过程. 在IOS中有静态库和动态库的区分,下面我们就来详细介绍一下. 一.静态库和动态库的详细介绍. 我们平时的工程中或多或少都要引入第 ...

  8. iOS企业分发证书制作

    自签名证书制作流程 打开终端,输入 openssl genrsa - ,生成名称为ca的秘钥 注:openssl生成的文件皆放在用户文档下(finder菜单栏'前往' - 电脑 -Macintosh ...

  9. c#上iOS apns p12文件制作记录 iOS推送证书制件

    前期一些准备工作可参考:http://jingyan.baidu.com/article/7082dc1c6bb86de40a89bd1a.html 1.在桌面上建一个"apns_p12&q ...

随机推荐

  1. Codeforces Round #287 D.The Maths Lecture

    The Maths Lecture 题意:求存在后缀Si mod k =0,的n位数的数目.(n <=1000,k<=100); 用f[i][j]代表 长为i位,模k等于j的数的个数. 可 ...

  2. js中立即执行

    ( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到 ...

  3. JQuery 绑定回车事件 兼容ie8,ie9

    $("#form-search").find('#search-query').bind('keypress', function(e) { var keycode; if(win ...

  4. ubuntu 解压,压缩

    .rar解压:rar x FileName.rar压缩:rar a FileName.rar DirName

  5. Java学习----创建对象的数组

    1.初始化数组的长度 2.初始化每个元素对象 3.调用每个对象的方法 public class Student { private String name; public Student() {} p ...

  6. JavaScript 获取当月天数

    getDate() 方法可返回月份的某一天.取值范围是1~31 如果是0的话,就返回最后一天.这样就能取得当月的天数了 比如获取16年2月份的天数 var day = new Date(2016,2, ...

  7. windows 下 pgsql 拓展开启

    环境:windowxp + apache2.2+php5.2.13+postgresql8.3 操作步骤:1.修改php.ini,去掉“extension=php_pgsql.dll ”和“exten ...

  8. JQuery jsonp使用小记

    在一个不支持PHP的主机上,需要对某些页面做访问统计.我的方案是在静态的HTML页面上,用JSONP向能够执行PHP的主机进行跨域请求,从而使用PHP解决这个访问量统计问题. 在服务器端,PHP页面返 ...

  9. bzoj1662: [Usaco2006 Nov]Round Numbers 圆环数

    Description 正如你所知,奶牛们没有手指以至于不能玩“石头剪刀布”来任意地决定例如谁先挤奶的顺序.她们甚至也不能通过仍硬币的方式. 所以她们通过"round number" ...

  10. 【译】UI设计基础(UI Design Basics)--自动适配与布局(Adaptivity and Layout)(四)

    2.3  自动适配与布局(Adaptivity and Layout) 2.3.1  开发成自动适配(Build In Adaptivity) 用户通常希望在自己的所有设备,各种场景中使用他们喜欢的a ...