偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

詳解iPhone開(kāi)發(fā)中電子書(shū)App里超長(zhǎng)字符串分頁(yè)問(wèn)題

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

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

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

  1. -(NSArray*)getPagesOfString:(NSString*)cache withFont:(UIFont*)font inRect:(CGRect)r{  
  2. //返回一個(gè)數(shù)組, 包含每一頁(yè)的字符串開(kāi)始點(diǎn)和長(zhǎng)度(NSRange)  
  3. NSMutableArray *ranges=[NSMutableArray array];  
  4. //斷行類(lèi)型  
  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. //把字符串按段落分開(kāi), 提高解析效率  
  14. NSArray *paragraphs=[cache componentsSeparatedByString:@"n"];  
  15. for (int p=0;p< [paragraphs count];p++) {  
  16. NSString *para;  
  17. if (lastParaLeft!=nil) {  
  18. //上一頁(yè)完成后剩下的內(nèi)容繼續(xù)計(jì)算  
  19. para=lastParaLeft;  
  20. lastParaLeft=nil;  
  21. }else {  
  22. para=[paragraphs objectAtIndex:p];  
  23. if (p<[paragraphs count]-1)  
  24. para=[para stringByAppendingString:@"n"]; //剛才分段去掉了一個(gè)換行,現(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é)尾 這一頁(yè)也算  
  35. [ranges addObject:[NSValue valueWithRange:range]];  
  36. //IMILog(@”===========Page Over=============”);  
  37. }  
  38. }else if (totalLines+paraLines==maxLine) {  
  39. //很幸運(yùn), 剛好一段結(jié)束,本頁(yè)也結(jié)束, 有這個(gè)判斷會(huì)提高一定的效率  
  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. //重頭戲, 頁(yè)結(jié)束時(shí)候本段文字還有剩余  
  48. NSInteger lineLeft=maxLine-totalLines;  
  49. CGSize tmpSize;  
  50. NSInteger i;  
  51. for (i=1; i<[para length]; i++) {  
  52. //逐字判斷是否達(dá)到了本頁(yè)***容量  
  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. //超出容量,跳出, 字符要回退一個(gè), 應(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開(kāi)發(fā)電子書(shū)App里超長(zhǎng)字符串分頁(yè)問(wèn)題的內(nèi)容介紹完了,希望通過(guò)本文的學(xué)習(xí)能對(duì)你有所幫助!

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

2010-09-17 10:26:01

iPhone

2009-06-17 16:12:26

java電子書(shū)制作軟件

2015-10-21 14:27:18

ORACLE 超長(zhǎng)字符解決辦法

2012-04-13 18:57:22

2009-06-12 16:52:49

2012-04-09 17:24:11

電子書(shū)App

2012-03-20 09:43:11

Boogie Boar

2013-06-14 10:13:06

PythonPython電子書(shū)Python教程

2020-03-03 15:17:45

Linux電子書(shū)命令

2011-12-13 14:43:29

51CTO

2020-06-15 18:20:37

Fedora電子書(shū)開(kāi)源

2023-05-04 07:37:44

KDEArianna

2018-12-05 16:00:32

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

2011-08-10 18:47:18

Cocoa字符串

2016-11-23 08:48:24

LinuxCalibre電子書(shū)

2021-12-15 19:37:49

索引字符串字段

2012-11-28 11:33:46

Windows Ser

2017-10-16 15:49:31

Linux閱讀器電子書(shū)

2011-08-10 17:37:00

iPhoneASIHTTPRequ

2020-01-02 11:20:35

LibreOffice電子書(shū)應(yīng)用
點(diǎn)贊
收藏

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