IOS富文本

來源:互聯網
上載者:User

標籤:

背景:前些天突然想做一個筆記本功能,一開始,覺得挺簡單的呀,一個UITextView,網路緩衝也不幹了,直接本地NSUserDefault儲存,然後完事了,美工,弄幾張好看的圖片,加幾個動畫,也就這樣了。接著,按照慣例,查看已有的備忘錄軟體,其app store知名的軟體:Weiconote等。才發現沒那麼簡單。這裡先不考慮圖文混排的問題,首先面對的就是:鍵盤隱藏之後,文字的位置移動問題啦。細心的體驗後發現:系統的備忘錄,已經一些做得好的軟體,都會進行一些處理,例如:1.當我編輯的時候,游標應該是一直不被鍵盤高度隱藏的才對。2.我在文字中間進行編輯的話,編輯完成隱藏鍵盤,UITextView的文字位置這個時候應該是我剛才編輯的部分。於是開始寫:1. 查看了暴露出來的API,屬性,不被鍵盤高度遮住,frame,contentInset,textContainerInset,都可以做到。根據鍵盤的本身的 notification ,或者UITextView delegate ,能輕易做到。部分代碼: 2.解決方案比較麻煩,查看了所有的api,就只有父類的這個api有用的:- (void)scrollRectToVisible:(CGRect)rect animated:(bool)animate;接下來的問題來了,根據游標當前的位置高度,手動計算屬性,然後,擷取要移動的位置,進行跳轉。因為預設的情況是:只要鍵盤隱藏了,會自動跳到UITextView的最前面的。至於擷取游標位置,以及計算移動的位置的問題,可以很快查到資料的。這裡的這位哥,也遇到同樣的問題,解決方式也是一樣的。 http://petersteinberger.com/blog/2014/fixing-uitextview-on-ios-7/ 裡邊也已經有了github源碼分享。(不做重複的事情)事實上,問題2最好的解決方式是:自己根據TextKit封裝一個UITextView... 上面的背景就是這樣了,解決了問題後,發現,為什麼不順便把圖文混排的問題也一次性解決了。一直以來,富文本編輯都是沒有深入的,之前也是直接用的開原始碼,或者UIWebView,總是心裡不踏實,卡頓的情況偶爾發生,非常不開心。於是,接下來,才是今天主要想分享的東西了:富文本問題。 關鍵詞:coretext textkit第三方庫分析:DTCoretext M80AttributedLabel FastText EGOText 官網參考資料:UITextKit: https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/Introduction/Introduction.htmlCoreText: https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/CoreText_Programming/Introduction/Introduction.html#//apple_ref/doc/uid/TP40005533 TextKit能讓我們自己手動管理字型的顏色,樣式(Text Layout),觸摸事件,排版,圖文的混排規則。Textkit是基於CoreText的,與WebKit是兩個不同的分支。我主要查看的也是TextKit,用coreText太麻煩了。而它們之間的關係邏輯如所示:具體到顯示上,渲染的流程是先從儲存的NSTextStorage中擷取text以及它的attributes,再經過NSLayoutManager布局顯示容器包括形狀,大小等,再經過NSTextContainer布局呈具體的顯示,最後展示在UI上。渲染和實現的流程: 這裡注意描述:By using multiple text containers, each with an associated text view, more complex layout arrangements are possible.  到了這裡,基本心理有個譜了。大致清楚這個邏輯了。接下來細分一下: a.這裡,先說一下具體到文本的樣式,先上一張官方的說明圖:我們可以設定文字的字型各種細節,段落排版,對其方式,縮排規則等。關於樣式:內建有六種,通過UIFont直接設定:UIFontTextStyleHeadline, UIFontTextStyleSubheadline, UIFontTextStyleBody, UIFontTextStyleFootnot, UIFontTextStyleCaption1, UIFontTextStyleCaption2 b.然後開始寫圖文混排了參考代碼:NSMutableAttributedString *string;通過插入NSTextAttachment設定image對象,其中NSTextAttachment可以繼承重寫方法實現修改插入內容大小。這裡實際上就是找到一個NSRange位置然後插入圖片,常見的插入表情。然後表情轉換成字串輸出出來。字串再轉換成圖片輸出。我們可以遍曆輸入的字串,通過NSTextStorage設定字串的字型,進行自訂規則處理等,例如,##進列名大寫,高亮等。通過NSLayoutManager來設定輸入常值內容行數,文本段的縮排規則,行間距等。通過NSTextContainer來設定文字的布局方式,例文環繞方式,等。基本的Text Kit 功能這樣子了,基本能滿足富文本的所有要求了。自己排版,按照自己項目的商務邏輯做一些事情。 最後還是附加開頭提到的一些庫,閱讀好的源碼分析比什麼都好:M80AttributedLabel:基本的TextKit封裝,代碼易懂,例子非常好用簡單,試過效果挺好,需要做一些效能最佳化處理。DTCoretext: CoreText封裝,解析正規的HTML源碼,展示出來成富文本,非常強大,如果安卓端和IOS使用同一套介面的時候,就非常好用了。相容問題。 部分參考連結:http://esoftmobile.com/2013/10/17/text-kit%E8%BF%9B%E9%98%B6/#morehttps://github.com/xiangwangfeng/M80AttributedLabelhttps://github.com/Cocoanetics/DTCoreText?:DTCoreText 啟動並執行時候有提示需要先進行:git submodule init  update    

IOS富文本

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.