1. 程式人生 > >[Swift通天遁地]八、媒體與動畫-(14)使用TextKit快速實現文章的分欄效果

[Swift通天遁地]八、媒體與動畫-(14)使用TextKit快速實現文章的分欄效果

receive tst cond dds pan load 範圍 pos 尺寸

本文將演示對長文本進行分欄顯示。往項目中導入一份文本文件。

在左側的項目導航區,打開視圖控制器的代碼文件【ViewController.swift】

現在開始編寫代碼,加載文本文件中的內容,並對文字進行分欄。

 1 import UIKit
 2 
 3 class ViewController: UIViewController {
 4 
 5     override func viewDidLoad() {
 6         super.viewDidLoad()
 7         // Do any additional setup after loading the view, typically from a nib.
8 9 //文本視圖控件提供了很大的靈活性,可以快速進行富文本視圖的創建和設計。 10 //在此初始化一個指定顯示區域的文本視圖,用來實現雜誌中常見的分欄效果。 11 let firstTextView = UITextView(frame: CGRect(x: 20, y: 40, width: 135, height: 200)) 12 //設置第一個視圖的背景顏色為棕色。 13 firstTextView.backgroundColor = UIColor.brown 14 //取消文本視圖的可滾動性,使多余的無法顯示的文字,自動進入第二個文本視圖。
15 firstTextView.isScrollEnabled = false; 16 //將第一個文本視圖添加到根視圖。 17 self.view.addSubview(firstTextView) 18 19 //獲得第一個視圖的文字存儲屬性 20 let textStorage = firstTextView.textStorage 21 //創建一個字符串,表示文本文件在項目中的路徑。 22 let path = Bundle.main.url(forResource: "
word", withExtension: "txt") 23 //添加一個異常捕捉語句,用來讀取文本文件。 24 do 25 { 26 //讀取文本文件中的文字內容。 27 let string = try String(contentsOf: path!) 28 //將讀取的文字,賦予文本視圖的文字存儲屬性。 29 textStorage.replaceCharacters(in: NSRange(location: 0,length: 0), with: string) 30 } 31 catch 32 { 33 print("Something went wrong :(") 34 } 35 36 //創建第二個文本視圖的顯示區域,它和第一個文本視圖的尺寸相同,但是位於第一個文本視圖的右側。 37 let secondRect = CGRect(x: 165, y: 40, width: 135, height: 200) 38 //初始化一個文字容器對象。 39 let secondTextContainer = NSTextContainer() 40 //使用文字容器對象,創建第二個文本視圖。 41 let secondTextView = UITextView(frame: secondRect, textContainer: secondTextContainer) 42 //設置第二個文本視圖的背景顏色為棕色 43 secondTextView.backgroundColor = UIColor.brown 44 //取消文本視圖的可滾動性 45 secondTextView.isScrollEnabled = false 46 //將第二個文本視圖添加到根視圖。 47 self.view.addSubview(secondTextView) 48 49 //使用相同的方式,創建最後一個文本視圖,該視圖位於兩個文本視圖的下方。 50 let thirdRect = CGRect(x: 20, y: 250, width: 280, height: 300) 51 //初始化一個文字容器對象。 52 let thirdTextContainer = NSTextContainer() 53 //使用文字容器對象,創建第三個文本視圖。 54 let thirdTextView = UITextView(frame: thirdRect, textContainer: thirdTextContainer) 55 //設置第三個文本視圖的背景顏色為紫色。 56 thirdTextView.backgroundColor = UIColor.purple 57 //取消第三個文本視圖的可滾動性。 58 thirdTextView.isScrollEnabled = false 59 //將第三個文本視圖添加到根視圖 60 self.view.addSubview(thirdTextView) 61 62 //初始化一個布局管理器。 63 let layoutManager = NSLayoutManager() 64 //將第一個文本視圖的文字容器,添加到布局管理器。 65 layoutManager.addTextContainer(firstTextView.textContainer) 66 //將第二個文本視圖的文字容器,也添加到布局管理器。 67 layoutManager.addTextContainer(secondTextContainer) 68 //將第三個文本視圖的文字容器,添加到布局管理器, 69 //管理器就可以將三個文本視圖視為一個容器, 70 //當內容超出第一個文本視圖的顯示範圍時,將自動填充第二個文本視圖,以此類推。 71 layoutManager.addTextContainer(thirdTextContainer) 72 //將布局管理器,賦予一個文本視圖的文字存儲屬性, 73 //從而使三個文本視圖,都可以顯示第一個文本視圖的文字存儲屬性的內容。 74 textStorage.addLayoutManager(layoutManager) 75 } 76 77 override func didReceiveMemoryWarning() { 78 super.didReceiveMemoryWarning() 79 // Dispose of any resources that can be recreated. 80 } 81 }

[Swift通天遁地]八、媒體與動畫-(14)使用TextKit快速實現文章的分欄效果