2010-03-03 101 views
3

我有一個類,它的工作是將文本解析爲多個頁面。 我使用sizeWithFont:方法來識別一個頁面何時結束,另一個開始。 但不幸的是,由於需要解析的文本量非常大,整個操作需要在後臺線程上執行(需要幾秒鐘才能完成)。因此,有時我的界面上會出現視覺工件(UIKit不是線程安全的,但我可以同時從多個線程中調用它),我很想擺脫它。sizeWithFont的替代方法:方法

我需要擺脫使用sizeWithFont:在後臺線程。但是,這似乎不是這種方法的替代方法。找出與核芯顯卡文本的寬度的唯一方法是使用蘋果的文檔中所述方法:

  1. 調用函數CGContextGetTextPosition獲取當前文本位置。
  2. 使用函數CGContextSetTextDrawingMode將文本繪製模式設置爲kCGTextInvisible。
  3. 通過調用函數CGContextShowText在當前文本位置繪製文本來繪製文本。
  4. 通過調用函數CGContextGetTextPosition來確定最終的文本位置。
  5. 從結束位置減去起始位置以確定文本的寬度。

但我真的很擔心,這將導致巨大的性能損失。

任何人都知道另一種查找文本寬度的方法嗎?

回答

1

如果您有針對iPhone OS 3.2的應用程序的可能性,您可以查看Core Text

雖然,請注意整個Core Text庫也不完全是線程安全的。從文檔:

多核考慮因素:核心文本中的所有單個函數都是線程安全的。字體對象(CTFont,CTFontDescriptor和相關對象)可以被多個操作,工作隊列或線程同時使用。但是,應該在單個操作,工作隊列或線程中使用佈局對象(CTTypesetter,CTFramesetter,CTRun,CTLine,CTFrame和相關對象)。