成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解iPhone開發(fā)中電子書App里超長字符串分頁問題

移動開發(fā) iOS
iPhone開發(fā)中電子書App里超長字符串分頁問題是本文喲啊介紹的內(nèi)容,主要是來學(xué)習(xí)字符串分頁的問題,來看本文詳細(xì)內(nèi)容講解。

iPhone開發(fā)電子書App里超長字符串分頁問題是本文喲啊介紹的內(nèi)容,主要是來學(xué)習(xí)字符串分頁的問題,來看本文詳細(xì)內(nèi)容講解。超長字符串分頁是所有做電子書之類的程序都會遇到的一個問題. 前一陣搞一個項目, 花了3天時間搞這個小方法, 總是分頁不夠精確. ***我發(fā)現(xiàn)了問題所在: 要用UILabel來顯示文字, 而不是TextView!!

大體思路就是,把字符串分段落, 用段落去填充頁. 下面是這個小方法, 希望會對大家有幫助:

  1. -(NSArray*)getPagesOfString:(NSString*)cache withFont:(UIFont*)font inRect:(CGRect)r{  
  2. //返回一個數(shù)組, 包含每一頁的字符串開始點和長度(NSRange)  
  3. NSMutableArray *ranges=[NSMutableArray array];  
  4. //斷行類型  
  5. UILineBreakMode lineBreakMode=UILineBreakModeCharacterWrap;  
  6. //顯示字體的行高  
  7. CGFloat lineHeight=[@"Sample樣本" sizeWithFont:font].height;  
  8. NSInteger maxLine=floor(r.size.height/lineHeight);  
  9. NSInteger totalLines=0;  
  10. NSLog(@”Max Line Per Page: %d (%.2f/%.2f)”,maxLine,r.size.height,lineHeight);  
  11. NSString *lastParaLeft=nil;  
  12. NSRange range=NSMakeRange(0, 0);  
  13. //把字符串按段落分開, 提高解析效率  
  14. NSArray *paragraphs=[cache componentsSeparatedByString:@"n"];  
  15. for (int p=0;p< [paragraphs count];p++) {  
  16. NSString *para;  
  17. if (lastParaLeft!=nil) {  
  18. //上一頁完成后剩下的內(nèi)容繼續(xù)計算  
  19. para=lastParaLeft;  
  20. lastParaLeft=nil;  
  21. }else {  
  22. para=[paragraphs objectAtIndex:p];  
  23. if (p<[paragraphs count]-1)  
  24. para=[para stringByAppendingString:@"n"]; //剛才分段去掉了一個換行,現(xiàn)在換給它  
  25. }  
  26. CGSize paraSize=[para sizeWithFont:font  
  27. constrainedToSize:r.size  
  28. lineBreakMode:lineBreakMode];  
  29. NSInteger paraLines=floor(paraSize.height/lineHeight);  
  30. if (totalLines+paraLines<maxLine) {  
  31. totalLines+=paraLines;  
  32. range.length+=[para length];  
  33. if (p==[paragraphs count]-1) {  
  34. //到了文章的結(jié)尾 這一頁也算  
  35. [ranges addObject:[NSValue valueWithRange:range]];  
  36. //IMILog(@”===========Page Over=============”);  
  37. }  
  38. }else if (totalLines+paraLines==maxLine) {  
  39. //很幸運, 剛好一段結(jié)束,本頁也結(jié)束, 有這個判斷會提高一定的效率  
  40. range.length+=[para length];  
  41. [ranges addObject:[NSValue valueWithRange:range]];  
  42. range.location+=range.length;  
  43. range.length=0;  
  44. totalLines=0;  
  45. //IMILog(@”===========Page Over=============”);  
  46. }else{  
  47. //重頭戲, 頁結(jié)束時候本段文字還有剩余  
  48. NSInteger lineLeft=maxLine-totalLines;  
  49. CGSize tmpSize;  
  50. NSInteger i;  
  51. for (i=1; i<[para length]; i++) {  
  52. //逐字判斷是否達(dá)到了本頁***容量  
  53. NSString *tmp=[para substringToIndex:i];  
  54. tmpSize=[tmp sizeWithFont:font  
  55. constrainedToSize:r.size  
  56. lineBreakMode:lineBreakMode];  
  57. int nowLine=floor(tmpSize.height/lineHeight);  
  58. if (lineLeft<nowLine) {  
  59. //超出容量,跳出, 字符要回退一個, 應(yīng)為當(dāng)前字符已經(jīng)超出范圍了  
  60. lastParaLeft=[para substringFromIndex:i-1];  
  61. break;  
  62. }  
  63. }  
  64. range.length+=i-1;  
  65. [ranges addObject:[NSValue valueWithRange:range]];  
  66. range.location+=range.length;  
  67. range.length=0;  
  68. totalLines=0;  
  69. p–;  
  70. //IMILog(@”===========Page Over=============”);  
  71. }  
  72.  
  73. }  
  74. return [NSArray arrayWithArray:ranges];  

小結(jié):詳解iPhone開發(fā)電子書App里超長字符串分頁問題的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對你有所幫助!

責(zé)任編輯:zhaolei 來源: i迷
相關(guān)推薦

2010-09-17 10:26:01

iPhone

2009-06-17 16:12:26

java電子書制作軟件

2015-10-21 14:27:18

ORACLE 超長字符解決辦法

2012-04-13 18:57:22

2009-06-12 16:52:49

2012-04-09 17:24:11

電子書App

2012-03-20 09:43:11

Boogie Boar

2013-06-14 10:13:06

PythonPython電子書Python教程

2020-03-03 15:17:45

Linux電子書命令

2011-12-13 14:43:29

51CTO

2020-06-15 18:20:37

Fedora電子書開源

2023-05-04 07:37:44

KDEArianna

2018-12-05 16:00:32

MongoDB數(shù)據(jù)庫NoSQL

2011-08-10 18:47:18

Cocoa字符串

2016-11-23 08:48:24

LinuxCalibre電子書

2021-12-15 19:37:49

索引字符串字段

2012-11-28 11:33:46

Windows Ser

2017-10-16 15:49:31

Linux閱讀器電子書

2011-08-10 17:37:00

iPhoneASIHTTPRequ

2020-01-02 11:20:35

LibreOffice電子書應(yīng)用
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 精品国产一区二区国模嫣然 | 一区二区三区视频免费观看 | 国产午夜精品一区二区三区嫩草 | 欧美性一区二区三区 | 91网站在线看| 亚洲一区在线播放 | 中文字幕免费视频 | 欧美日韩亚洲国产 | 国产在线精品一区二区 | 国产无人区一区二区三区 | 国产日韩久久久久69影院 | 国产一区2区 | 久久久国产一区二区三区四区小说 | 性福视频在线观看 | 国产激情自拍视频 | 国产亚洲一区二区三区 | 国产美女在线看 | аⅴ资源新版在线天堂 | 亚洲品质自拍视频 | 国产精品久久久久久影视 | 国产xxx在线观看 | 国产福利在线小视频 | 精品久久99 | 日韩免费在线 | 91精品国产欧美一区二区成人 | 亚洲在线视频 | 91免费高清视频 | 亚洲永久在线 | 亚洲成人精品免费 | 综合五月婷 | 久久国产一区二区三区 | 久久久久无码国产精品一区 | 亚洲国产精品一区二区三区 | 超碰在线观看97 | 成人毛片视频免费 | 日韩成人在线免费观看 | 亚洲精品久久久一区二区三区 | 天天综合网7799精品 | 久久久久久久久久性 | 懂色中文一区二区在线播放 | 国产精品免费一区二区三区四区 |