精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

男女污视频在线观看| 蜜臀久久99精品久久久久久| 菠萝菠萝蜜在线视频免费观看 | www.久久色.com| 国产大片一区二区三区| av免费不卡| 国产精品色哟哟| 痴汉一区二区三区| 国产污视频网站| 亚洲国产一成人久久精品| 欧美不卡123| 男人揉女人奶房视频60分| 99青草视频在线播放视| 国产高清精品网站| 国产成人亚洲综合91精品| 国内偷拍精品视频| 精品国产一区二区三区四区| 欧美一区二区视频免费观看| 精品欧美一区免费观看α√| 日本在线播放| 91免费视频网址| 成人午夜两性视频| 日本一区二区三区精品| 综合国产在线| 在线观看国产成人av片| 熟妇高潮一区二区| 欧美一级做一级爱a做片性| 天天综合日日夜夜精品| 一区二区视频在线观看| 日韩av视屏| 成人午夜激情视频| 91久久国产综合久久91精品网站| 国产无人区码熟妇毛片多| 亚洲视频在线免费| 在线播放国产精品| aaaaa一级片| www.国产精品一区| 91精品国产综合久久久久| 男人透女人免费视频| av资源在线看片| 亚洲免费毛片网站| 亚洲激情电影在线| 国产三级在线免费| xfplay精品久久| 国产欧美日韩在线播放| 国产情侣自拍小视频| 日本中文一区二区三区| 热门国产精品亚洲第一区在线| 欧美日韩激情在线观看| 99久久夜色精品国产亚洲1000部| 亚洲欧洲一区二区三区在线观看 | 免费一区二区三区在线视频| 欧美视频一区二区三区四区| 那种视频在线观看| 僵尸再翻生在线观看| 亚洲国产另类av| 男女激情免费视频| 不卡的av影片| 亚洲国产人成综合网站| avav在线播放| 国内小视频在线看| 亚洲国产成人tv| 成年人午夜免费视频| 国产h片在线观看| 午夜国产精品一区| 免费一级特黄特色毛片久久看| 91www在线| 精品国产91久久久久久| 日本免费黄视频| 欧美性猛交xxx高清大费中文| 狠狠色噜噜狠狠狠狠97| 欧美成人精品欧美一级乱| 欧美大片免费高清观看| 在线观看日韩一区| 91小视频网站| 国产美女视频一区二区| 日韩午夜中文字幕| 娇妻高潮浓精白浆xxⅹ| 亚洲国产网址| 在线中文字幕日韩| 日韩在线中文字幕视频| 亚洲无线视频| 97精品久久久| 日韩欧美不卡视频| 久久精品动漫| 成人性生交xxxxx网站| 99久久免费国产精精品| 粉嫩av一区二区三区在线播放| 亚洲一区二区自拍| 日本激情视频网站| 久久中文娱乐网| 中文字幕一区二区三区四区五区| 午夜dj在线观看高清视频完整版| 亚洲尤物视频在线| 欧洲av无码放荡人妇网站| 久久精品国产福利| 欧美成人乱码一区二区三区| 国产一级二级在线观看| 欧美在线观看视频一区| 久久91精品国产91久久久| 青青操免费在线视频| 麻豆成人av在线| 国产精品久久久久久久久久久久午夜片| 日韩一级免费视频| 国产精品嫩草99a| 国产va亚洲va在线va| 国产超碰精品| 日韩精品在线看片z| 美女洗澡无遮挡| 欧美xxx在线观看| 18性欧美xxxⅹ性满足| 一级黄色大片免费| 国产+成+人+亚洲欧洲自线| 日韩高清国产精品| 国产777精品精品热热热一区二区| 欧美最新大片在线看| 国产精品亚洲一区二区无码| 欧美一级精品| 欧美在线免费观看| 成人1区2区3区| 国产免费观看久久| 精品一二三四五区| 日韩大陆av| 亚洲欧美日韩直播| 国产精品成人久久| 国产在线精品免费av| 欧美一级日本a级v片| 2018av在线| 欧美一区二区久久| 少妇愉情理伦三级| 久久精品一区| 久久久久欧美| 美女网站视频在线| 91精品国产综合久久精品麻豆| 在线小视频你懂的| 亚洲影院一区| 精品1区2区| 免费看电影在线| 日韩午夜精品电影| xxxx日本少妇| 久久精品999| 日韩欧美亚洲区| 日韩免费福利视频| 亚洲另类xxxx| 在线能看的av| 久久亚洲一级片| 国产亚洲综合视频| 欧美freesex8一10精品| 久久久亚洲国产天美传媒修理工| aaa一区二区三区| 欧美一级高潮片| 久久免费高清| 免费观看国产成人| 中文字幕人成乱码在线观看| 欧美va日韩va| 国产大片中文字幕在线观看| 国产成人免费视频网站高清观看视频 | 特级西西444www大精品视频免费看| 成人一区二区三区在线观看| av动漫在线播放| 天堂久久av| 久久久久久久久久国产| 丰满人妻一区二区三区免费视频 | 国产毛片精品国产一区二区三区| 在线观看成人一级片| 欧美性理论片在线观看片免费 | 成人影欧美片| 欧美丰满高潮xxxx喷水动漫| 麻豆精品国产免费| 国产精品一区二区在线观看不卡| 日本一道在线观看| 国产精品调教| 欧洲精品在线视频| 不卡在线视频| 欧美一区二区三区四区视频| 九九视频免费在线观看| 成人午夜伦理影院| 免费在线观看的av网站| 欧洲激情综合| 亚洲aⅴ男人的天堂在线观看 | 一区二区三区在线不卡| 精品人妻一区二区免费| 模特精品在线| 亚洲欧美影院| 91成人入口| 日本在线精品视频| 午夜视频在线免费观看| 欧美成va人片在线观看| 天堂网中文字幕| 国产精品国产精品国产专区不蜜| 日本高清免费观看| 99伊人成综合| 亚洲v国产v在线观看| 日本久久伊人| 国产精品av电影| 天堂成人av| 亚洲最新视频在线| 精品久久久久久亚洲综合网站| 午夜精品成人在线视频| 亚洲色图27p| 99久久精品免费看国产| 性刺激的欧美三级视频| 激情综合电影网| 亚洲欧美日本国产有色| 懂色av一区二区| 国产精品视频99| 不卡的av影片| www.午夜精品| 涩爱av在线播放一区二区| 欧美肥妇毛茸茸| 色一情一乱一伦| 亚洲黄色性网站| 国产在线综合视频| 成人av在线一区二区三区| www.com黄色片| 亚洲美女网站| 99国产精品白浆在线观看免费| 精品国产一级毛片| 精品一区二区三区日本| 成人短视频软件网站大全app| 国产91精品高潮白浆喷水| 成人影院www在线观看| 亚洲欧洲xxxx| 搡老岳熟女国产熟妇| 91麻豆精品国产91久久久久久久久 | 日韩在线无毛| 日韩久久精品一区| 亚洲专区在线播放| 日本丶国产丶欧美色综合| 久久影院一区二区| 亚洲欧美日韩国产成人精品影院| 国产jjizz一区二区三区视频| av资源站一区| 免费看91视频| 国产一区二区h| 亚洲欧洲日本精品| 男女性色大片免费观看一区二区| 欧美丰满熟妇bbbbbb百度| 亚洲一级影院| 国产免费裸体视频| 国产精品videossex久久发布| 一级二级三级欧美| 欧美日韩在线播放视频| 蜜桃狠狠色伊人亚洲综合网站| 红杏一区二区三区| 国产精品国产精品国产专区蜜臀ah | 欧美日韩视频| 99re8这里只有精品| 香蕉综合视频| 国产精品久久成人免费观看| 99久久www免费| 中日韩在线视频| 97精品国产| 91免费视频黄| 欧美成人有码| 国产av熟女一区二区三区| 欧美激情日韩| 国产1区2区3区中文字幕| 一精品久久久| 亚洲精品少妇一区二区| 午夜精品偷拍| 男人用嘴添女人下身免费视频| 亚洲日韩成人| 欧美污视频网站| 日韩成人免费电影| 成人日韩在线视频| 国产一区免费电影| 久久久国产精品久久久| 成人免费高清在线| 国产国语性生话播放| 久久人人爽人人爽| 国产精品1区2区3区4区| 亚洲视频一区在线| 伊人365影院| 日韩欧美国产黄色| 中文字幕你懂的| 91精品国产欧美一区二区成人| 亚洲第一精品网站| 亚洲精品视频免费在线观看| 每日更新av在线播放| 中文字幕欧美在线| 1区2区3区在线视频| 欧美劲爆第一页| 免费观看亚洲| 国产日韩欧美日韩大片| 一区视频网站| 欧美日韩在线精品一区二区三区| 国内精品久久久久久久久电影网| 伊人精品久久久久7777| 亚洲午夜精品久久久久久app| 国产91美女视频| 精品午夜一区二区三区在线观看| 欧美性猛交乱大交| 91美女蜜桃在线| 91动漫免费网站| 亚洲国产成人精品视频| 少妇无套内谢久久久久| 精品少妇一区二区| 国产一区电影| 欧美激情亚洲一区| 亚洲电影有码| 国产精品污www一区二区三区| 国产欧美日韩视频在线| 50度灰在线观看| 丝袜美腿亚洲综合| 性感美女一区二区三区| 国产欧美一区二区三区在线看蜜臀| 国产精品九九九九九九| 91久久免费观看| 欧美一区二区公司| 北条麻妃99精品青青久久| 日本乱码一区二区三区不卡| 成人黄在线观看| 国产剧情一区| 亚洲人成无码网站久久99热国产| 男女男精品网站| 亚洲av无码一区二区三区人| 一区二区三区国产| 伊人网视频在线| 精品亚洲一区二区三区在线播放| av毛片在线看| 国产精品小说在线| 九九视频精品全部免费播放| 激情小视频网站| 国产剧情一区在线| 萌白酱视频在线| 日本黄色一区二区| 午夜av免费在线观看| 欧美激情视频一区二区| 国产精品一区三区在线观看| 日本在线播放不卡| 亚洲欧美日韩一区在线观看| 亚洲精品激情视频| 亚洲美女在线国产| 97成人免费视频| 色诱女教师一区二区三区| 在线一区av| 久久伊人资源站| 亚洲精品社区| 人妖粗暴刺激videos呻吟| 夜夜嗨av一区二区三区中文字幕| 一本久道久久综合无码中文| 国产亚洲欧美日韩美女| 日本成人三级电影| 欧美日韩一区二区视频在线观看 | 668精品在线视频| 97久久综合区小说区图片区| 三级在线免费观看| 国产精品一区二区久久精品爱涩| 微拍福利一区二区| 欧美在线观看18| bbbbbbbbbbb在线视频| 国产成人av网址| 精品99久久| 黑森林精品导航| 中文字幕一区二区三| 国产又粗又猛又爽又黄的视频一| 最新国产精品拍自在线播放| 国产精品4hu.www| 最近看过的日韩成人| 激情综合色综合久久| 免费成年人视频在线观看| 欧美一区二区久久久| 麻豆av在线免费观看| 国产三级精品在线不卡| 国产婷婷精品| 受虐m奴xxx在线观看| 在线欧美小视频| 免费在线观看黄| 99电影网电视剧在线观看| 黄色日韩精品| 国产精品探花一区二区在线观看| 欧美性生交xxxxxdddd| 95在线视频| 亚洲曰本av电影| 日韩午夜电影| 国产精品av久久久久久无| 91精品欧美福利在线观看| 搞黄网站在线看| 欧美日韩精品综合| 韩国女主播成人在线| 日本少妇毛茸茸高潮| 亚洲视频在线免费观看| 国产成人免费av一区二区午夜 | 欧美日韩在线一二三| 国模一区二区三区白浆| 国产精品18p| 尤物tv国产一区| 国产 日韩 欧美 综合 一区| 国产v亚洲v天堂无码久久久| 亚洲女子a中天字幕| 四虎精品成人免费网站| 国产欧美精品久久久| 亚洲日本欧美| 亚洲 欧美 变态 另类 综合| 精品一区二区亚洲| 久久精品免视看国产成人| 欧美黄色免费影院| 亚洲精品美腿丝袜| 岛国在线大片|