怎样使用 iOS 7 的 AVSpeechSynthesizer 制作有声书(2)
切分语句
软件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; } |
这段代码负责:
- 处理 RWTBook.testBook 调用情况,这样的情况下,page 的 utterances 属性是一个 NSString。设置 displayText 和 backgroundImage 属性。
- 处理 book 数据来自 WhirlySquirrelly.plist 的情况,这样的情况下,page 的 utterances 是一个 NSArray 。将全部 utterances 和 display Text 合并。
- 遍历 page 中的每一个 utterances 。
- 读取每一个 utterances 的 utteranceString 和 utteranceProperties。
- 创建一个 AVSpeechUtterance 用于朗读 utteranceString。
- 通过键值编码(KVC)来改动 AVSpeechUtterance 实例属性。尽管苹果未在文档中说明,但能够调用 AVSpeechUtterance 的 setValuesForKeysWithDictionary:方法来设置全部 utteranceProtperties 属性。也就是说,你能够向 plist 中增�新的 utterance 属性,而不须要调用其 setter 方法,setValuesForKeysWithDictionary:方法会自己主动处理新属性。当然,在 AVSpeechUtterance 中对应的属性必须存在并且是可写的。
- 累加 utterance 并显示文本。
- 设置要显示的文本和背景图片。
编译执行,听听都在说些什么。
怎样使用 iOS 7 的 AVSpeechSynthesizer 制作有声书(2)的更多相关文章
- 怎样使用 iOS 7 的 AVSpeechSynthesizer 制作有声书(1)
原文: http://www.raywenderlich.com/64623/make-narrated-book-using-avspeechsynthesizer-ios-7 随着 PageVie ...
- 怎样使用 iOS 7 的 AVSpeechSynthesizer 制作有声书(3)
plist 中的每一页 utteranceSting 我们都创建了一个RWTPage.displayText.因此,每页的文本会一次性地显示出来. 由于 You've constructedeach ...
- 如何使用 iOS 7 的 AVSpeechSynthesizer 国家有声读物(4)
控制:我们一定要学会控制 尤达大师(电影<星球大战>)有话:的关键在于控制.这本故事书是一个字一个字读出来,我愿意为它添加两个button,音调和语速,以便我们能够调整语音合成实时的时候. ...
- iOS静态库的制作与引用
[iOS静态库的制作与引用] 1.Configuring Exported Headers To configure which headers are exported to clients, se ...
- iOS企业应用Profile制作流程
第一步:企业版iDP申请完成以后,访问iOS Dev Center:https://developer.apple.com/devcenter/ios/index.action 第二步:点击Log I ...
- iOS自定义控件教程:制作一个可重用的旋钮
当你的APP需要一些新功能时,自定义UI控件会十分有用,尤其是这些自定义控件可以在其他APP里面很好的重用.Colin Eberhart写过一篇很棒的介绍自定义UI控件的教程.这个教程涉及的是一个继承 ...
- iOS 静态库的制作
按照公司的想法 要开发一款SDK,于是就抽空学习一下静态枯的制作过程. 在IOS中有静态库和动态库的区分,下面我们就来详细介绍一下. 一.静态库和动态库的详细介绍. 我们平时的工程中或多或少都要引入第 ...
- iOS企业分发证书制作
自签名证书制作流程 打开终端,输入 openssl genrsa - ,生成名称为ca的秘钥 注:openssl生成的文件皆放在用户文档下(finder菜单栏'前往' - 电脑 -Macintosh ...
- c#上iOS apns p12文件制作记录 iOS推送证书制件
前期一些准备工作可参考:http://jingyan.baidu.com/article/7082dc1c6bb86de40a89bd1a.html 1.在桌面上建一个"apns_p12&q ...
随机推荐
- Codeforces 527E Data Center Drama(欧拉回路)
题意: 给定一个无向图连通图,把这个的无向边变成有向边,并添加最少的有向边使这个图每个结点的出度为偶数. Solution: 题目很长,并且很多条件说的不太直接,确实不太好懂. 首先先看得到的无向图, ...
- java dos下中文乱码
代码如下: public class PrintString{ public static void main(String args[]){ System.out.println("\\* ...
- CSS负边距自适应布局三例
单列定宽单列自适应布局: <!DOCTYPE HTML> <html> <head> <meta charset=”UTF-8″> <title& ...
- php之购物车类思路及代码
<?php /* 购物车类 1.整站范围内,购物车--全局有效 解决:把购物车的信息,放在session里 2.既然全局有效,购物车的实例只有一个 解决:单例模式 技术选型:session+单例 ...
- centos postfix 邮箱安装记录
---恢复内容开始--- #wget http://nchc.dl.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.9 ...
- Unity问答——请教一下NGUI的图片转换问题
这篇博客源自我在泰课在线的回答.链接:http://www.taikr.com/group/1/thread/92 问:请教一下NGUI的图片转换问题 1.NGUI能不能把导入的方形图片转成圆形的(因 ...
- Windows Phone 8 SQL Server CE 数据库
员工信息表 EmployeeTable.cs using System.Data.Linq.Mapping; using System.ComponentModel; namespace SQLSer ...
- 工作总结:MFC使用Windows自带打开对话框
代码: ; //Win98 as default LPARAM lModuleParam = ; TV_INSERTSTRUCT tvItem; CString sPathNameSel; ];//1 ...
- [HDOJ 5155] Harry And Magic Box
题目链接:HDOJ - 5155 题目大意 有一个 n * m 的棋盘,已知每行每列都至少有一个棋子,求可能有多少种不同的棋子分布情况.答案对一个大素数取模. 题目分析 算法1: 使用容斥原理与递推. ...
- 利用多线程资源竞争技术上传shell
通过多线程资源竞争的手段同时上传两个头像,就可以在Apache+Rails环境下实现远程代码执行.这并不是天方夜谭,同时我相信许多文件上传系统都会有这个漏洞……这是一个非常有趣的安全实验,一起来看看吧 ...