毕业设计(论文)-基于iOS移动端的小说阅读器.docx_第1页
毕业设计(论文)-基于iOS移动端的小说阅读器.docx_第2页
毕业设计(论文)-基于iOS移动端的小说阅读器.docx_第3页
毕业设计(论文)-基于iOS移动端的小说阅读器.docx_第4页
毕业设计(论文)-基于iOS移动端的小说阅读器.docx_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

盐城师范学院毕业设计盐 城 师 范 学 院毕业设计基于iOS移动端的小说阅读器学生姓名 学 院 信息工程学院 专 业 软件工程 班 级 学 号 指导教师 2016年4月20日基于iOS移动端的小说阅读器摘 要该款小说阅读器是基于iOS系统的小说阅读软件,你只需运行软件就可以博览群书,无需注册,操作简单,用户可对小说名称或小说作者进行模糊搜索即可找到你想要阅读的小说,手动设置背景颜色提供适宜的阅读环境,滑动或者上下快捷键点击翻页等。该设计是以iOS操作系统作为开发平台,Xcode作为开发环境,运用OC语言设计的一款APP。本文对小说阅读器的背景和意义作了比较详细的介绍,同时将设计过程中采用的Core Data数据库技术和iPhone主要控件及其方法进行了比较详细的说明。打开该款APP,首先是小说列表页面,阅读者可以进行小说模糊搜索,再点击每个小说的Tableview cell即可进入正文阅读并且还可以设置背景颜色,点击添加书签即可保存当前页面内容,然后到书签页面便可继续阅读。【关键词】iOS;数据库;控件全套设计加扣 3012250582Fiction reader based on iOS mobile terminalAbstractThe novel reader is fiction based on iOS reading software, you only need to run the software can read, no registration required, simple operation, the user can the novel name or the author of the novel fuzzy search can find you want to read the novel, manually set the background color to provide appropriate reading environment, sliding or quick click on a page.The design is based on iOS operating system as the development platform, Xcode which is a development environment, using OC language to design a APP. This paper gives a detailed introduction to the significance and the background of the novel reader, and gives a detailed description of the SQLite database technology and the iPhone main control and the methods used in the design process. Open the app, the first novel list page, the reader can novel fuzzy search, and then click each of the novel tableview cell can enter text reading and you can also set the background color, click add bookmarks can save the current page content, and then to bookmark the page will be able to continue reading. Keywords iOS, Database, controls目 录1绪论11.1开发的背景及意义11.2 研究思路11.3 研究的问题12项目技术介绍22.1 iOS概述22.2 Objective-c 简介22.3 Xcode工具介绍22.4 Core Data框架介绍33应用总体设计33.1 构建框架33.2 需求分析53.2.1可行性分析53.2.2 功能需求53.3 功能模块设计53.4 数据库设计64功能模块详解64.1 小说列表模块94.2 正文阅读模块144.3 书签模块225系统测试255.1 测试用例流程图265.2 模块测试265.2.1 搜索框测试265.2.2 书签测试275.3 功能测试275.3.1 系统页面跳转的测试275.3.2 网络相关功能测试275.4 测试总结276总结27参考文献29致 谢301绪论1.1开发的背景及意义阅读是人类获取知识的重要途径之一,近年来手机的发展迅速,基本人人必备一部手机,并且随身携带,甚至出现了“低头族”这种说法,手机在人们生活中扮演的角色越来越重要。手机电子阅读器是手机中专门用来阅读电子书的重要软件,iOS的崛起也为阅读小说提供了除安卓系统以外的另一种平台。该款项目是在苹果iOS系统上运用OC语言,通过Xcode工具,采用MVC模式和 Core Data数据库技术,设计完成的小说阅读器,功能简单并且人性化。平时的我就喜欢上网看小说,设计这款iOS app软件完全是本着学习开发项目的目的,而不是为了获取经济利益,并且在设计的过程中参考了网上一些资料和与周边朋友的交流沟通,所以完成这款项目将对我以后做项目和找工作做了很好的铺垫。 1.2 研究思路本项目的研究思路非常清晰,通过网络和社会调查首先进行应用分析,包括可行性分析和需求分析,然后对系统开发工具和技术进行介绍,系统开发工具涉及Objective-C技术、Xcode开发工具以及Core Data简介等,然后构建系统框架及MVC设计模式,再对主界面各个模块功能进行解析,最后进行系统测试。课题研究的方法是运用 OC语言,结合Core Data框架,并且结合数据库技术访问小说信息;通过代码对数据库中相关表的访问,实现对小说信息的查询,当然也可以手动到Core Data中增加、删除和修改。1.3 研究的问题随着移动互联网应用技术的突飞猛进,智能手机已经成为最重要的应用设备,并且吸引越来越多的消费者利用智能手机进行网上冲浪、收发电子邮件、看电影、打游戏、视频对话等。苹果手机也让人们的生活变得越来越便捷,同时丰富了人们的业余生活,该款APP可以方便用户随时随地的阅读各种类型小说并且此款软件可以广泛的应用于iOS系统。项目将根据人们的阅读习惯,并结合用户使用心理,在做了充分的准备工作后,对小说阅读器设计了以下功能及解决问题:1) 刚打开软件时有一个动画界面,使软件看起来更加炫酷2) 进入软件会有一个搜索框,下面是小说列表,方便用户查看及选择小说3) 书签功能界面,点击按钮之后会进入书签界面,可以对书签进行增删改,方便以后快速地阅读4) 翻页,提供了两种翻页方式,一种是手动点击,另一种是滑动,多样化选择5) 改变阅读背景颜色,使阅读变得更为个性化6) 使用Core Data保存数据2项目技术介绍2.1 iOS概述 iOS是由苹果公司开发的手持设备操作系统,是与安卓并驾齐驱的操作系统,不同的是它主要给iPhone、iPodtouch以及iPad设备使用,它管理设备硬件并为手机本地应用程序的实现提供基础技术。根据设备不同,操作系统具有不同的系统应用程序,例如APP Store 、Mail以及Safari等等,这些应用程序可以为用户提供各种需求。2.2 Objective-c 简介 Objective-c1的写法有所不同,如ObjC、OC、Objective C和Obj-C,顾名思义是一种简单的面向对象编程语言。它是苹果的OSX(X表示第十代)和iOS操作系统,及其相关的API、Cocoa和CocoaTouch的主要编程语言。Objective-C是编写以下应用的利器:操作系统、iOS应用程序、Mac OS X操作系统以及上面的应用系统。iPhone的成功促进了Objective-c语言的发展,因为编写iPhone应用程序的主要编程语言是Objective-C,本系统的实现就是通过Objective-c语言。2.3 Xcode工具介绍 Xcode2 工具目前为止只支持苹果系列产品开发,是苹果公司向开发人员集成开发环境,也就是只能在Mac OS X,ios系统上开发,其他系统Xcode均不支持该工具。Xcode工具支持的编程语言有C语言、C+、Objective-C、Objective-C+、Java等等 。Xcode是开发OS X 和 iOS 应用程序的最快捷的方式,Xcode 具有统一的用户界面设计,编码、测试和调试都在一个简单的窗口内完成,Xcode为本系统通过Objective-c实现提供了良好的环境(本系统采用Xcode7.3版本)。2.4 Core Data框架介绍 Core Data3,iOS5之后才出现的一个框架,在Xcode中以xcdatamodeld格式出现,它的功能是提供了对象-关系映射(ORM),简单地说就是将OC对象转化成数据,保存在SQLite数据库文件中,同时也能够将保存在数据库中的数据还原成OC对象。Core Data 的优点是对内存合理管理,并且不需要像sql那样写大量代码,避免很多麻烦,而且非常高效。Core Data中有几个非常重要的对象,NSManagedObjectMode:加载模型文件,获取App文件中的实体信息,NSPersistentStoreCoordinator:添加持久化库,NSManagedObjectContext:获取上下文对象操作实体,这些对象是生成App文件后在delegate文件中调用各种方法,无需我们管理。3应用总体设计3.1 构建框架三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为三层:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer),iOS分层架构设计有所不同,如图3-14所示:表示层(UIKit Framework)业务逻辑层数据持久层(SQLite API、Core Data、HTTP等网络通信技术)信息系统层(SQLite DB、文件系统、云服务) 图3-1 iOS平台中信息处理应用的分层架构设计图MVC全名是Model View Controller,是模型(model)视图(view)控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。具体的3个部分的作用如图3-2所示: 图3-2 MVC模式 综上所述,本项目在X-code中,Controller存放的文件有小说列表模块、正文阅读模块、书签模块,model存放的文件有Core Data(添加书签时保存的小说信息)、txt(保存的各个小说内容)、SDWebImage(小说图片),View存放的文件AppDelegate,如图3-3所示:图3-3 X-code中的MVC模式3.2 需求分析3.2.1可行性分析1) 技术可行性该系统的开发环境是Xcode7.2.1版本,采用了MVC三层模式,由此可以看出只要熟悉 Objective-C编程和Core Data数据库就可以进行开发,而苹果系统有3种途径可以获取:安装虚拟机、黑苹果、苹果电脑,所以仅就技术而言,开发该项目是完全可行的。2) 经济可行性目前该项目我只是为毕业而设计,还有些功能需要完善,所以也产生不了所谓的经济利益,这就决定了了该项目在经济上完全可行。3) 操作可行性 该项目采用菜单式,实现用户与数据库的交互,界面简洁明了,操作方便。用户只需掌握基本的电脑操作常识,不需掌握数据库等相关知识。3.2.2 功能需求 该项目目前功能不是非常健全,将有限的资源存入数据库中,有待进一步改进,主要功能有以下几个:前台功能: 1)搜索框:查看全部小说,根据条件进行查询搜索等 2)小说简介:查看小说介绍,可以进行上下拖拉 3)书签:增加修改书签 4)翻页:手动点击上下翻页或者使用手势滑动上下翻页 5)设置背景颜色:设置小说正文背景颜色 后台功能:对启动画面,书签背景以及小说资源进行增删改等功能3.3 功能模块设计该项目从模块上分为:小说列表,小说正文,书签,后台管理这几个大块,如图3-4所示:图3-4功能模块划分3.4 数据库设计 iOS四种保存数据的方式5: 1)NSKeyedArchiver:采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议2) NSUserDefaults:用来保存应用程序设置和属性、用户保存的数据3)Write写入方式:永久保存在磁盘中。 4)SQLite:采用SQLite数据库来存储数据本项目数据主要保存于沙盒和Core Data中,也就是第3和第4种方式。iOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容。所有的非代码文件都保存在这个地方,比如图片、声音、属性列表和文本文件等。4功能模块详解4.1 小说列表模块本项目数据保存在沙盒中,沙盒是以plist文件保存数据,如图4-1所示:图4-1 X-code中的plist文件 这些数据是将网络上现有的资源保存于沙盒之中,可以进行增加、删除和修改,如何将这些数据在整个项目中使用,还要通过SQLite。具体方法是在Xcode开发工具中添加 libsqlite3.0.dylibw文件:首先是设置项目文件,在项目中添加iPhone版的sqlite3的数据库的开发包,在项目下的Frameworks点击右键,然后选择libsqlite3.0.dylib文件。如图4-2所示:图4-2 libsqlite3.0.dylib文件 首先获取数据库文件路径,NSString *fileName=NSBundle mainBundlepathForResource:Novel List ofType:plist;其中Novel List是存放小说的文件名,plist是文件类型。 然后将小说信息文件以数组形式存放,NSArray *dictArray=NSArray arrayWithContentsOfFile:fileName; 最后将沙盒里的数据放入App中,for(NSDictionary *dict in dictArray)/具体是创建字典dict用来获取数组App* temp=App allocinit;/引用App文件,该文件生成方法会在下面core data中介绍temp setValuesForKeysWithDictionary:dict;/给App文件设值,通过setValuesForKeysWithDictionary键值设值apps addObject:temp;/将App文件中获取的值存放入数组apps中,方便调用 项目首页是小说列表模块,主要用于小说信息的显示及搜索,还可以去书架阅读,如图4-3所示:图4-3 小说列表页面 小说顶部是iOS开发项目中非常常用的一种控件:Navigation Bar6,用于各个controller(控制器)也就是页面之间的切换。Navigation Bar是在storyboard中手动创建:点击Main.storyboard,然后在右下角搜索框中搜索Navigation Bar控件,选中拖到小说列表Scene最上面即可,这样设计大大简化了代码,在这上面添加一个item:我的书架,点击就可以进入书架页面,详细代码如下: UIStoryboard *story=UIStoryboard storyboardWithName:Main bundle:nil;novelReadController *novelReadController=story instantiateViewControllerWithIdentifier:VM;/获取MainStoryboard,并将书架页面的Viewcontroller取名为VM,方便切换的时候调用self presentViewController:novelReadController animated:YES completion:nil;/将当前页面的Viewcontroller跳转到取名为VMViewcontroller页面 在Navigation Bar控件下面也是一种非常重要的控件:Search Bar。Search Bar用于条件模糊搜索,这里用到的是小说名字搜索,如图所示4-4:图4-4 小说名字搜索 Search Bar实现了几种类方法,所以需要用UISearchBarDelegate协议,协议在viewDidLoad中需要实现:self.searchBar.delegate=self。具体的几种类方法如下: - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText/如果文本框为空,显示所有数据 if (searchText isEqualToString: ) /列出所有数据 apps = appsCopy; /刷新列表 self.tableView reloadData; else /否则初始化数组,获取搜索的数组 NSMutableArray *tmpApps= NSMutableArray array;/遍历所有数组,如果文本框中包含小说名字或者作者长度大于0,显示所有数据 for(App *app in appsCopy) if( rangeOfString:searchText.length0 | app.author rangeOfString:searchText.length0) /rangeOfString是用来判断是否包含字符串,包含的话存入数组tmpApps tmpApps addObject:app; apps = tmpApps;/刷新列表 self.tableView reloadData; 点击搜索框的时候需要调用searchBarShouldBeginEditing中searchBar setShowsCancelButton方法,点击取消按钮后让取消按钮消失调用searchBarTextDidEndEditing中方法searchBar.showsCancelButton,将默认值YES改为NO, 点击搜索框上的取消按钮时调用searchBarCancelButtonClicked方法,此时文本框为空即_searchBar.text = ,然后刷新列表self.tableView reloadData,并将搜索框辞去焦点_searchBar resignFirstResponder。 在Search Bar控件下面是小说列表模块中最重要的一部分:小说信息的显示。实现这一功能用到了非常重要的一种控件:UITableView。这里还要提到Viewcontroller(视图控制器)的创建,如图4-5所示:图4-5 视图控制器的创建 视图控制器是整个页面的核心,用于一个页面的管理。创建了UITableViewController视图控制器,就可以实现了UITableView几种方法(如下),用于小说信息的显示。/获取Tableview中section的数量 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView return 1;/获取每一个section行数 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section return self.apps.count;/设置cell,每一个cell对应一本小说信息 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath /创建cell,创建的时候首先要获取名为novelList的tableView,这是在storyboard中手动设置的 UITableViewCell *cell = tableView dequeueReusableCellWithIdentifier:novelList forIndexPath:indexPath; /获取所有小说信息 App *temp=apps objectAtIndex:indexPath.row; /创建name标签,需要在storyboard中手动设置Tag UILabel *name=(UILabel*)cell viewWithTag:2; /创建author标签,需要在storyboard中手动设置Tag UILabel *author=(UILabel*)cell viewWithTag:3; /创建desc标签,需要在storyboard中手动设置Tag UITextView *desc=(UITextView*)cell viewWithTag:4; /创建image标签,需要在storyboard中手动设置Tag UIImageView *image=(UIImageView*)cell viewWithTag:1; /设置name、author、desc中文本框内容 name.text=; author.text=temp.author; desc.text=temp.desc; /设置未加载时的图片 UIImage *placeImage=UIImage imageNamed:Image; NSString * urlImage = temp.image; /通过SDWebImage框架获取图片 /获取URL地址 NSURL *url=NSURL URLWithString:urlImage; /通过SDWebImage框架加载图片,无需手动管理 image sd_setImageWithURL:url placeholderImage:placeImage options:SDWebImageRetryFailed progress:(NSInteger receivedSize,NSInteger expectedSize) completed:(UIImage *image,NSError *error,SDImageCacheType casheType,NSURL *imageURL) NSLog(下载完成); ; return cell; 有了小说信息,点击UITableViewCell后即阅读,这时用到了另一种方法: -(void)tableViewLUITableView *)tableView didSelectRowAtIndexPathLNSIndexPath *)indexPath /获取每一本小说的name、image、id NSString *nlName=self.apps objectAtIndex:indexPath.rowvalueForKey:”name”; NSString *nlImage=self.apps objectAtIndex:indexPath.rowvalueForKey:”image”; NSNumber *nlId=self.apps objectAtIndex:indexPath.rowvalueForKey:”id”; /获取MainStoryboard,并将阅读页面的Viewcontroller取名为 novelRead ,方便切换的时候调用 UIStoryboard *story=UIStoryboard storyboardWithName:”Main” bundle:nil; novelReadController *novelReadController=story instantiateViewControllerWithIdentifier:”novelRead”; /将小说的name、image、id在阅读页面中显示 novelReadController.novelName=nlName; novelReadController.novelImage=nlImage; novelReadController.xsId=nlId; /页面跳转到正文阅读模块:novelReadController self presentViewController:novelReadController animated:YES completion:nil;4.2 正文阅读模块 点击小说列表模块中的UITableViewCell后,系统便进入了正文阅读模块,如图4-6所示:图4-6 小说正文 最顶部还是Navigation Bar,与首页小说列表模块相比,这一控件多了一个item:返回,点击后返回到小说列表页面,另外还增加了两个Labels,一个用于显示小说图片,另一个用于显示小说名字,添加书签这一button和之前上面的我的书架button相似,在Navigation Bar控件下面是这一模块的主要部分:小说正文,在正文上面有一个button,设置背景颜色,主要引用了MLTableAlert框架,具体代码如下: self.alert = MLTableAlert tableAlertWithTitle:请选择颜色 cancelButtonTitle:取消 numberOfRows:NSInteger (NSInteger section)return 10;其中设置弹出框alert, 参数tableAlertWithTitle为弹出框最顶部的标题,cancelButtonTitle为弹出框最底部的标题,numberOfRows为弹出框的行数,即颜色数目,本项目为10。 andCells:UITableViewCell* (MLTableAlert *anAlert, NSIndexPath *indexPath) 其中MLTableAlert为弹出框设置颜色的框架,需要手动导入,NSIndexPath表示UITableViewCell中的section和row。static NSString *CellIdentifier = CellIdentifier;/创建静态变量CellIdentifier,用来给UITableViewCell作标识 UITableViewCell *cell = anAlert.table dequeueReusableCellWithIdentifier:CellIdentifier; if (cell = nil) cell = UITableViewCell alloc initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier; _bgColor=UIColor colorWithRed:arc4random()%255/255.0f green:arc4random()%255/255.0f blue:arc4random()%255/255.0f alpha:1;/如果UITableViewCell为空,则初始化,UITableViewCellStyleDefault是默认格式,reuseIdentifier标识参数cell.backgroundColor=_bgColor;/设置可供选择的cell的颜色self.alert.height = 350;/设置弹出框alert的高度self.alert configureSelectionBlock:(NSIndexPath *selectedIndex) /创建UITableViewCell, 如果没有可见或索引路径,则返回零 UITableViewCell * cell = self.alert.table cellForRowAtIndexPath:selectedIndex; /将小说阅读背景颜色设置为cell 的背景颜色 self.textView.backgroundColor=cell.backgroundColor; _bgColor = cell.backgroundColor;效果如下图4-7所示:图4-7 小说正文颜色设置效果图 小说正文要能够满足读者阅读,必须要先计算总页数7,然后进行分页,这一过程如下:首先通过bounding方法计算出总共要展示的文本的高度/创建可变化的段落格式paragraphStyle NSMutableParagraphStyle *paragraphStyle = NSMutableParagraphStyle alloc init;paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;/创建字典attributes,调用dictionaryWithObjectsAndKeys方法,给字典设值,包括文本格式self.textView.font, NSFontAttributeName, paragraphStyle.copy, NSParagraphStyleAttributeName NSDictionary *attributes = NSDictionary dictionaryWithObjectsAndKeys:self.textView.font, NSFontAttributeName, paragraphStyle.copy, NSParagraphStyleAttributeName, nil;计算出要展示文章的高度totalTextSize,调用boundingRectWithSize方法 计算总高度的目的是为了计算小说列表正文阅读部分理想状态下的每页显示的字符数和总页数,不过在此之前要考虑一种特殊情况:有时候小说是从网络上下载的,这些小说的文本并不是很多,也就是说字符很少,所以为了通用性和提高效率,这些文本就用一页展示并不需要繁琐地计算。/当字符过少时,无需分页 if (totalTextSize.size.height 500) referCharsPerPage = 500; 接着用referCharsPerPage每页的字符数计算高度,为了防止第一页字符数过少,使得计算不准确,从第二页开始获取每页的理想状态下字符数 NSRange range = NSMakeRange(referCharsPerPage, referCharsPerPage); NSString *pageText = self.textView.text substringWithRange:range;CGSize pageTextSize = pageText boundingRectWithSize:CGSizeMake(self.textView.frame.size.width, CGFLOAT_MAX)options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil.size; 有了高度以后就判断是否能容纳在textView高度的区域内,一直调整每页字符数直到一页可以容纳下为止。 while (pageTextSize.height self.textView.height) /每页字符数减2 referCharsPerPage -= 2; /获取每页字符数范围 range = NSMakeRange(0, referCharsPerPage); /获取文本内容,调用substringWithRange pageText = self.content substringWithRange:range; /获取每页文本尺寸,调用boundingRectWithSize pageTextSize = pageText boundingRectWithSize:CGSizeMake(self.textView.width, CGFLOAT_MAX)options:NSStringDrawingUsesLineFragmentOriginattributes:attributescontext:nil.size; 最后记录结果,当然得排除字符数为0的情况 charsPerPage = referCharsPerPage; if (charsPerPage != 0) allPages = (NSInteger)(self.textView.text.length / charsPerPage) + 1; charsOfLastPage = self.textView.text.length- (allPages - 1) * charsPerPage; flag=YES; return &(allPages); 分页好之后,还要实现翻页功能,该项目提供了两种途径,一是点击按钮,另一种是通过手势8。首先是点击按钮翻页:/点击上一页时响应的事件 -(void)upPage if (currentPage = 1) /当前页数为1的话,跳出弹出框alert UIAlertView * alertView = UIAlertView alloc initWithTitle:温馨提示 message:这已是第一页 delegate:self cancelButtonTitle:取消 otherButtonTitles:确定, nil; alertView show; return; /每次点击,页数都减1 currentPage = currentPage - 1; UIView beginAnimations:nil context:nil; /设置翻页间隔 UIView setAnimationDuration:0.1; /调整小说内容到当前页面 _textView setContentOffset:CGPointMake(0, (currentPage - 1) * 580) animated:YES; /设置当前页和总页数显示 button04 setTitle:NSString stringWithFormat:%lu/%lu,(unsigned long)currentPage,(unsigned long)allPages;/点击下一页时响应的事件 -(void)downPage/当前页数为最好一页的话,跳出弹出框alert, initWithTitle为弹出框的标题,message为提示信息,cancelButtonTitle为取消按钮标题,otherButtonTitles为取消按钮标题 if (currentPage = allPages) UIAlertView * alertView = UIAlertView alloc initWithTitle:温馨提示 message:这已是最后一页 delegate:self cancelButtonTitle:取消 otherButtonTitles:确定, nil;/每次点击,页数都加1,并设置按钮显示当前页数和总页数 currentPage = currentPage + 1; button04 setTitle:NSString stringWithFormat:%lu/%lu,(unsigned long)currentPage ,(unsigned long)allPages;/调整小说内容到当前页面,调用setContentOffset和setAnimationTransition _textView setContentOffset:CGPointMake(0, (currentPage - 1) * 580) animated:YES; UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES;另一种手势翻页:- (void)pan:(UIPanGestureRecognizer *)pan/获取当前页面坐标 CGPoint point = pan translationInView:_textView; /如果滑动坐标 -

温馨提示

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

评论

0/150

提交评论