精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

實現iPhone電子書的分頁顯示功能(附代碼)

移動開發 iOS
制作iPhone電子書時,如果把大段文字放在 UITextView 或 UILabel 里顯示,是不能分頁的,閱讀時就像再看一大卷滾不到頭的紙帶,用戶體驗很差。下面這段代碼可以實現 UILabel 尺寸固定,根據文本內容和字體動態分頁顯示,電子書方面的應用應該非常有用。

最近我們介紹了幾個iPhone開發的代碼測試案例,今天我們將介紹iPhone電子書的分頁功能的代碼。制作iPhone電子書時,如果把大段文字放在 UITextView 或 UILabel 里顯示,是不能分頁的,閱讀時就像再看一大卷滾不到頭的紙帶,用戶體驗很差。下面這段代碼可以實現 UILabel 尺寸固定,根據文本內容和字體動態分頁顯示,電子書方面的應用應該非常有用。 

  1. // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.  
  2. - (void)viewDidLoad {  
  3.     [super viewDidLoad];  
  4.       
  5.     //  
  6.     totalPages = 0;  
  7.     currentPage = 0;  
  8.       
  9.     //  
  10.     textLabel.numberOfLines = 0;  
  11.       
  12.     //  
  13.     if (!text) {  
  14.         // 從文件里加載文本串  
  15.         [self loadString];  
  16.           
  17.         // 計算文本串的大小尺寸  
  18.         CGSize totalTextSize = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE_MAX]  
  19.                                          constrainedToSize:CGSizeMake(textLabel.frame.size.width, CGFLOAT_MAX)  
  20.                                     lineBreakMode:UILineBreakModeWordWrap];  
  21.  
  22.         // 如果一頁就能顯示完,直接顯示所有文本串即可。  
  23.         if (totalTextSize.height < textLabel.frame.size.height) {  
  24.             texttextLabel.text = text;  
  25.         }  
  26.         else {  
  27.             // 計算理想狀態下的頁面數量和每頁所顯示的字符數量,只是拿來作為參考值用而已!  
  28.             NSUInteger textLength = [text length];  
  29.             referTotalPages = (int)totalTextSize.height/(int)textLabel.frame.size.height+1;  
  30.             referCharatersPerPage = textLength/referTotalPages;  
  31.               
  32.             // 申請最終保存頁面NSRange信息的數組緩沖區  
  33.             int maxPages = referTotalPages;  
  34.             rangeOfPages = (NSRange *)malloc(referTotalPages*sizeof(NSRange));  
  35.             memset(rangeOfPages, 0x0, referTotalPages*sizeof(NSRange));  
  36.               
  37.             // 頁面索引  
  38.             int page = 0;  
  39.               
  40.             for (NSUInteger location = 0; location < textLength; ) {  
  41.                 // 先計算臨界點(尺寸剛剛超過UILabel尺寸時的文本串)  
  42.                 NSRange range = NSMakeRange(location, referCharatersPerPage);  
  43.                   
  44.                 // reach end of text ?  
  45.                 NSString *pageText;  
  46.                 CGSize pageTextSize;  
  47.                   
  48.                 while (range.location + range.length < textLength) {  
  49.                     pageText = [text substringWithRange:range];  
  50.                       
  51.                     pageTextSize = [pageText sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE_MAX]  
  52.                                         constrainedToSize:CGSizeMake(textLabel.frame.size.width, CGFLOAT_MAX)  
  53.                                             lineBreakMode:UILineBreakModeWordWrap];  
  54.                       
  55.                     if (pageTextSize.height > textLabel.frame.size.height) {  
  56.                         break;  
  57.                     }  
  58.                     else {  
  59.                         range.length += referCharatersPerPage;  
  60.                     }  
  61.                 }  
  62.                   
  63.                 if (range.location + range.length >= textLength) {  
  64.                     range.length = textLength - range.location;  
  65.                 }  
  66.                   
  67.                 // 然后一個個縮短字符串的長度,當縮短后的字符串尺寸小于textLabel的尺寸時即為滿足  
  68.                 while (range.length > 0) {  
  69.                     pageText = [text substringWithRange:range];  
  70.                       
  71.                     pageTextSize = [pageText sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE_MAX]  
  72.                                         constrainedToSize:CGSizeMake(textLabel.frame.size.width, CGFLOAT_MAX)  
  73.                                             lineBreakMode:UILineBreakModeWordWrap];  
  74.                       
  75.                     if (pageTextSize.height <= textLabel.frame.size.height) {  
  76.                         range.length = [pageText length];  
  77.                         break;  
  78.                     }  
  79.                     else {  
  80.                         range.length -2;  
  81.                     }  
  82.                 }  
  83.                   
  84.                 // 得到一個頁面的顯示范圍  
  85.                 if (page >= maxPages) {  
  86.                     maxPages += 10;  
  87.                     rangeOfPages = (NSRange *)realloc(rangeOfPages, maxPages*sizeof(NSRange));  
  88.                 }  
  89.                 rangeOfPages[page++] = range;  
  90.                   
  91.                 // 更新游標  
  92.                 location += range.length;  
  93.             }  
  94.  
  95.             // 獲取最終頁面數量  
  96.             totalPages = page;  
  97.               
  98.             // 更新UILabel內容  
  99.             textLabel.text = [text substringWithRange:rangeOfPages[currentPage]];  
  100.         }  
  101.     }  
  102.       
  103.     // 顯示當前頁面進度信息,格式為:"8/100"  
  104.     pageInfoLabel.text = [NSString stringWithFormat:@"%d/%d", currentPage+1, totalPages];  
  105. }  
  106.  
  107.  
  108. ////////////////////////////////////////////////////////////////////////////////////////  
  109. // 上一頁  
  110. - (IBAction)actionPrevious:(id)sender {  
  111.     if (currentPage > 0) {  
  112.         currentPage--;  
  113.           
  114.         NSRange range = rangeOfPages[currentPage];  
  115.         NSString *pageText = [text substringWithRange:range];  
  116.           
  117.         textLabel.text = pageText;  
  118.  
  119.         //  
  120.         pageInfoLabel.text = [NSString stringWithFormat:@"%d/%d", currentPage+1, totalPages];  
  121.     }  
  122. }  
  123.  
  124. ////////////////////////////////////////////////////////////////////////////////////////  
  125. // 下一頁  
  126. - (IBAction)actionNext:(id)sender {  
  127.     if (currentPage < totalPages-1) {  
  128.         currentPage++;  
  129.           
  130.         NSRange range = rangeOfPages[currentPage];  
  131.         NSString *pageText = [text substringWithRange:range];  
  132.           
  133.         textLabel.text = pageText;  
  134.           
  135.         //  
  136.         pageInfoLabel.text = [NSString stringWithFormat:@"%d/%d", currentPage+1, totalPages];  
  137.     }  
  138. }  

在設計iPhone電子書時,一定要注意UILabel 尺寸固定,否則是無法實現iPhone電子書的分頁。

[[15730]]

【編輯推薦】

  1. iPhone內存管理面面觀 自動釋放與便捷方法
  2. iPhone內存管理面面觀 對象所有權與引用計數
  3. iPhone開發入門守則:Objective-C編碼規范
  4. iPhone開發入門篇 “Hello World”分析代碼
責任編輯:佚名 來源: cocoachina
相關推薦

2011-08-19 09:54:40

iPhone開發電子書字符串

2011-08-08 10:42:46

iPhone UITableVie 分頁

2009-06-12 16:52:49

2020-03-03 15:17:45

Linux電子書命令

2013-06-14 10:13:06

PythonPython電子書Python教程

2011-06-27 13:17:56

Java

2012-03-20 09:43:11

Boogie Boar

2010-07-19 16:57:45

盈動電子書包12大功能全接觸

2011-12-13 14:43:29

51CTO

2020-06-15 18:20:37

Fedora電子書開源

2012-04-13 18:57:22

2018-12-26 10:06:28

Linux電子書閱讀器命令

2018-12-05 16:00:32

MongoDB數據庫NoSQL

2009-06-17 16:12:26

java電子書制作軟件

2017-01-19 19:03:25

微軟Edge瀏覽器電子書

2016-11-23 08:48:24

LinuxCalibre電子書

2023-11-19 18:58:12

LinuxFoliate

2011-03-28 15:57:03

Python

2019-12-16 11:12:48

開源技術 數據

2013-07-11 09:57:43

蘋果電子書
點贊
收藏

51CTO技術棧公眾號

巨乳诱惑日韩免费av| 四虎5151久久欧美毛片| 亚洲欧美日韩久久| 国产一区二区在线观看免费播放| 日本午夜精品理论片a级app发布| 老牛国内精品亚洲成av人片| 色综合久久天天| 中文字幕久久综合| 天堂在线视频免费观看| 日本中文字幕不卡| 久久99久国产精品黄毛片入口| www.17c.com喷水少妇| 第四色男人最爱上成人网| 亚洲欧洲av一区二区三区久久| 精品不卡一区二区三区| 亚洲一级av毛片| 国产精品www.| 色悠悠国产精品| 日本黄色免费观看| 国产麻豆精品| 欧美亚洲免费在线一区| 日韩av新片网| 精品黄色免费中文电影在线播放| 99久久伊人精品| 91天堂在线观看| 国产91av在线播放| 夜夜嗨av一区二区三区网站四季av| 日韩在线视频免费观看高清中文| 一级黄色免费视频| 国产精品一区三区在线观看| 欧美亚洲禁片免费| 欧美黄网站在线观看| 高清电影在线观看免费| 国产精品国产精品国产专区不蜜 | 久久久精品综合| dy888夜精品国产专区| 亚洲一区 中文字幕| 日精品一区二区| 78m国产成人精品视频| 五月天丁香激情| 一本一道久久a久久精品蜜桃| 在线看福利67194| 欧美 日韩 国产 成人 在线观看| 青青一区二区| 日韩电影在线观看中文字幕| 中国特级黄色大片| 中文字幕一区日韩精品 | 国产精品福利在线观看网址| 丰满少妇乱子伦精品看片| 在线视频观看日韩| 欧美激情视频一区二区| 激情综合五月网| 国产综合精品| 午夜精品久久久久久久99热| 国产精品自拍视频一区| 激情久久综合| 777精品视频| 日韩在线播放中文字幕| 天堂影院一区二区| 国产精品久久久久久久久久| 最好看的日本字幕mv视频大全 | 亚洲一区成人在线| 国产曰肥老太婆无遮挡| www.色在线| 欧美日韩精品在线视频| 日韩免费毛片视频| 3d性欧美动漫精品xxxx软件| 欧美影片第一页| 91看片破解版| 91精品入口| 日韩av有码在线| 91l九色lporny| 久久精品国产大片免费观看| 久久久国产一区| 四虎免费在线视频| 日韩午夜av在线| 国产成人精品日本亚洲| 在线观看国产精品入口男同| 经典三级在线一区| 亚洲综合第一页| 国精产品一品二品国精品69xx| 99久久99久久精品免费观看| 欧美久久在线| 黄色免费在线观看| 婷婷久久综合九色综合伊人色| 国产精品欧美激情在线观看| 久久精品国产精品亚洲毛片| 精品少妇一区二区三区免费观看| 韩国无码一区二区三区精品| 色综合天天爱| 久久久久久久影院| 欧美性猛交xxxx乱大交hd| 久久99久久99精品免视看婷婷| 91视频婷婷| 国产香蕉在线| 亚洲乱码一区二区三区在线观看| 人妻av中文系列| 亚洲图片小说区| 亚洲精品久久久久国产| 日本一级片免费| 国产手机视频一区二区| 91精品中文在线| 亚洲欧美日韩免费| 亚洲欧美日韩国产综合| 日本一区二区黄色| 天堂av一区| 中文在线资源观看视频网站免费不卡| 久一区二区三区| 日本网站在线观看一区二区三区| 国产高清一区视频| 欧美黄色激情| 色八戒一区二区三区| 99免费观看视频| 亚洲乱码电影| 国产精品无av码在线观看| 婷婷久久久久久| 成人免费在线播放视频| 草草草在线视频| 激情av综合| 欧美成人精品xxx| 中文字幕欧美人妻精品| av福利精品导航| 久操手机在线视频| 久久69av| 久久深夜福利免费观看| 亚洲午夜在线播放| 久久久噜噜噜久噜久久综合| 国产精品国产亚洲精品看不卡| 99er精品视频| 日韩亚洲欧美中文高清在线| 亚洲图片欧美日韩| 久久综合久久鬼色中文字| 国产一区二区四区| 1204国产成人精品视频| 成年人精品视频| 国产精品视频在线观看免费 | 欧洲猛交xxxx乱大交3| 奇米影视一区二区三区| 日韩国产在线一区| 五月激情久久| 亚洲美女中文字幕| 免费观看一区二区三区毛片| 成人av免费在线观看| 日本一本中文字幕| 国产精品毛片视频| 91av视频在线观看| 日本护士...精品国| 欧美性猛交xxxxx水多| 国产精品1000部啪视频| 久久黄色影院| 日本高清不卡三区| 免费高清视频在线一区| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 99精品国产在热久久| 高清av免费一区中文字幕| 日本高清在线观看| 亚洲精品一区二区三区精华液| 久草免费在线观看视频| www.日韩av| 人妻少妇被粗大爽9797pw| 国产亚洲欧美日韩在线观看一区二区| 国产91色在线免费| 91九色在线porn| 在线播放中文一区| 欧美日韩亚洲国产另类| 成人18视频在线播放| 青青草原成人网| 欧美限制电影| 亚洲free性xxxx护士白浆| 在线视频国产区| 亚洲国产高清高潮精品美女| 亚洲欧美偷拍一区| 国产精品美女久久久久av爽李琼| 91pony九色| 亚洲人成人一区二区三区| 欧美色欧美亚洲另类七区| 欧洲亚洲精品| 久久久久久国产免费| 三级无遮挡在线观看| 欧美三级日韩三级国产三级| 538精品在线观看| av一二三不卡影片| www.这里只有精品| 黄色精品一区| 日韩午夜视频在线观看| 国产精品日本一区二区不卡视频| 久久久久久久一区二区三区| 国产黄在线观看| 欧美va在线播放| 无码人妻一区二区三区免费| 亚洲色图在线视频| 波多野结衣一本| 国产精品自拍在线| 欧美女人性生活视频| 五月婷婷亚洲| 欧美精品成人一区二区在线观看| 国产精品传媒麻豆hd| 国内免费久久久久久久久久久| 成人网视频在线观看| 日韩欧美国产三级| 无码人妻丰满熟妇精品区| 一区二区三区在线视频观看| 鲁丝一区二区三区| 成人午夜av影视| 色天使在线观看| 久久成人一区| 黄色国产一级视频| 亚洲精品国产偷自在线观看| 免费观看成人在线| ccyy激情综合| 成人国产在线激情| 无人区在线高清完整免费版 一区二| 久久国产精品影视| 1024国产在线| 亚洲欧美在线磁力| 色哟哟中文字幕| 欧美一级理论片| 糖心vlog精品一区二区| 精品久久久久久久久久国产| 欧美激情国产精品免费| 国产精品久久久久永久免费观看 | 欧美精品大片| 亚洲国产一区二区在线| 米奇777超碰欧美日韩亚洲| 国产 高清 精品 在线 a| 在线观看欧美| 国产深夜精品福利| 欧美成人三级| 国产精品mp4| 裤袜国产欧美精品一区| 国内自拍欧美激情| 欧美人体视频xxxxx| 久久久91精品国产| 男人的天堂在线视频免费观看 | 欧美国产日韩在线视频| 多野结衣av一区| 美女福利视频一区| 日本暖暖在线视频| 中文字幕日韩视频| 国产福利免费在线观看| 亚洲女人天堂视频| 四虎在线免费观看| 日韩精品高清视频| 日韩一区免费视频| 亚洲国产精品人人爽夜夜爽| 狠狠躁日日躁夜夜躁av| 欧美成人精品高清在线播放| www.色播.com| 欧美精品一区二区三| 人妻无码中文字幕免费视频蜜桃| 精品粉嫩aⅴ一区二区三区四区| 亚洲国产剧情在线观看| 精品少妇一区二区三区在线播放| 成人午夜免费福利| 亚洲精品在线三区| 天堂а在线中文在线无限看推荐| 日韩精品免费在线观看| 欧美婷婷久久五月精品三区| 日韩精品视频免费在线观看| 欧洲免费在线视频| 最近2019免费中文字幕视频三 | 欧美大肥婆大肥bbbbb| 18加网站在线| 69精品小视频| 日本精品裸体写真集在线观看| 国产精品视频yy9099| 白嫩亚洲一区二区三区| 官网99热精品| 国产日产精品一区二区三区四区的观看方式 | 果冻天美麻豆一区二区国产| 精品一区国产| 操欧美老女人| 成人手机在线播放| 一本色道久久综合亚洲精品高清 | 制服国产精品| 欧美视频福利| 国产精品wwwww| 精品一区二区影视| 中国免费黄色片| 国产亚洲精久久久久久| 成人免费毛片xxx| 亚洲成国产人片在线观看| 六月丁香婷婷综合| 在线播放国产精品二区一二区四区 | 欧美一二三区| 一区二区电影| 免费成人在线视频网站| 麻豆专区一区二区三区四区五区| 在线观看欧美一区二区| 久久综合丝袜日本网| 黄色一级大片在线免费观看| 亚洲成人免费电影| 中日韩av在线| 亚洲精品成人久久| 黄页视频在线播放| 欧美中文字幕视频| 国产日本亚洲| 日韩免费一区二区三区| 欧美精品一线| 亚洲一区在线不卡| 不卡的av在线| 99自拍视频在线| 一本久久综合亚洲鲁鲁五月天| 99热这里只有精品在线| 国产亚洲欧美日韩精品| 日本三级在线观看网站| 国产欧美最新羞羞视频在线观看| 精品一区二区男人吃奶| 五月天av影院| 日产国产欧美视频一区精品| 中文字幕在线永久| 伊人一区二区三区| 亚洲性生活大片| 亚洲天堂av在线播放| av电影院在线看| 亚洲自拍偷拍区| 99久久夜色精品国产亚洲狼 | 国产无遮挡又黄又爽又色| 欧美精品久久99久久在免费线| 精品美女视频在线观看免费软件| 欧美高清无遮挡| 精品国产三级| 一区二区三区久久网| 秋霞成人午夜伦在线观看| 玖玖爱在线观看| 欧美日韩精品在线观看| 欧美一区二区三区成人片在线| 欧美成人中文字幕| 欧美日韩中出| 300部国产真实乱| 激情丁香综合五月| 无码人妻精品中文字幕| 欧美日韩在线播放三区四区| 久久免费看视频| 日本三级韩国三级久久| 日韩成人动漫在线观看| 中文字幕无码精品亚洲资源网久久| 国产盗摄女厕一区二区三区| 日韩成人毛片视频| 日韩一区二区免费高清| 亚洲小说区图片区都市| 亚洲999一在线观看www| 亚洲乱码在线| 91精品国产高清91久久久久久| 亚洲欧美日韩一区二区| 亚洲国产精品国自产拍久久| 欧美大片在线影院| 国产精品毛片av| 日韩欧美在线播放视频| 国产色产综合色产在线视频| 国产精品第六页| 日日狠狠久久偷偷四色综合免费| 国产精品诱惑| mm131午夜| 成人免费观看视频| 中文字幕一区二区三区精品| 精品亚洲国产视频| 欧美va视频| 国产一二三四五| 成人精品国产福利| 国产高清中文字幕| 在线电影中文日韩| 国产日本亚洲| 日本日本19xxxⅹhd乱影响| 久久夜色精品国产欧美乱极品| 中文字幕 国产精品| 精品国产区一区二区三区在线观看| 欧美成人精品一级| 成人午夜精品久久久久久久蜜臀| 久久综合久久综合九色| 一区二区日韩视频| 欧美老女人性生活| 综合伊思人在钱三区| 潘金莲激情呻吟欲求不满视频| 亚洲愉拍自拍另类高清精品| 色网站在线免费观看| 国产日本欧美视频| 亚洲一级特黄| 女人黄色一级片| 欧美成人综合网站| 亚洲三级欧美| 久久久成人精品一区二区三区| 成人av高清在线| 中文字幕制服诱惑| 欧美激情在线观看| 欧美日韩激情| 免费观看污网站| 欧美色图免费看| 国产第一页在线视频| 色大师av一区二区三区| 国产精品自产自拍| 销魂美女一区二区| 欧美黑人巨大精品一区二区| 加勒比久久综合| 性活交片大全免费看| 欧美挠脚心视频网站| 美女搞黄视频在线观看| 欧美aaa在线观看| 久久精品一区二区三区av| 超碰人人人人人人|