簡體   English   中英

CTLine具有“字符串訪問權”是什么意思?

[英]What does it mean for a CTLine to have “string access”?

我正試圖解決UILabel的一個毛茸茸的問題 ,我已經弄明白了,除了一件事:我正在挑戰,了解CTLine對“字符串訪問”意味着什么。

我想使用的方法是CTLineGetOffsetForStringIndex 這是該方法文檔的鏈接。

這是我不理解的文檔部分(重點是我的):

charIndex沿基線的主偏移量, 如果該行不支持字符串訪問則為0.0。

當我運行這個方法時,我得到0.0 ,所以我猜這意味着該行不支持字符串訪問 - 但這是什么意思,確切地說?

聲明“該行不支持字符串訪問”可以被推斷為意味着該行文本可以被視為可以由每個字符的索引訪問的字符序列。

這可能會引發關於視覺角色與非視覺角色以及字形與角色的大討論。 但為了簡化討論,假設一行文本可能具有以下狀態之一:

  1. 超過零個字符(轉換為同一行內的字形或空格的字符)出現在相關文本行中
  2. 文本行中沒有占據任何“空間”的字符

現在為這種推斷提供一些理由。

Apple的文檔提供了Text Kit的描述,UILabel的構建基於:

UIKit框架包括幾個類,其目的是在應用程序的用戶界面中顯示文本:UITextView,UITextField和UILabel,如在iOS中顯示文本內容中所述。 從UITextView類創建的文本視圖旨在顯示大量文本。 底層UITextView是一個強大的布局引擎,稱為Text Kit。 如果您需要自定義布局過程或需要干預該行為,則可以使用Text Kit。 對於需要自定義解決方案的少量文本和特殊需求,您可以使用替代的低級技術,如低級文本處理技術中所述。

Text Kit是UIKit框架中的一組類和協議,提供高質量的印刷服務,使應用程序能夠存儲,布局和顯示具有精細排版的所有特征的文本,例如字距調整,連字,換行和對齊。 Text Kit構建於Core Text之上,因此它提供相同的速度和功能。 UITextView與Text Kit完全集成; 它提供編輯和顯示功能,使用戶能夠輸入文本,指定格式屬性和查看結果。 其他Text Kit類提供文本存儲和布局功能。 圖8-1顯示了Text Kit在其他iOS文本和圖形框架中的位置。

圖8-1文本工具包框架位置 圖8-1文本工具包框架位置

Text Kit使您可以完全控制用戶界面元素中的文本呈現。 除了UITextView之外,UITextField和UILabel都構建在Text Kit之上,並且它與動畫,UICollectionView和UITableView無縫集成。 Text Kit設計有完全可擴展的面向對象的體系結構,支持子類化,委派和一組完整的通知,支持深度自定義。

相關問題的答案提到了幾個類,如NSTextStorageNSLayoutManagerNSTextContainer

考慮到UILabel使用上述所有類來提供在父UIView中顯示文本的最終結果,最終用戶在屏幕上看到該文本。 布局管理器( NSLayoutManager的實例)協調文本視圖,文本容器和文本存儲之間的數據流,從而在視圖中顯示字符。 布局管理器將字符映射到字形,並確定用於布置字形的行。 布局管理器還會計算出如何顯示下划線和刪除線等內容,這些內容不是字形的一部分。

對於此討論重要的是布局管理器布置了文本 如果該行文本是可選擇的,則用戶可以選擇該行中的可見字符。 在這種特殊情況下,線路有“字符串訪問”。

類似的概念是在相關問題的解決方案中發布的方法:

func boundingRect(forGlyphRange glyphRange: NSRange, in container: NSTextContainer) -> CGRect

返回單個邊界矩形(在容器坐標中),其中包含給定文本容器中為給定字形范圍繪制的所有字形和其他標記,包括在其線條片段矩形外部繪制的字形和文本屬性(如下划線)。

最后,函數CTLineGetOffsetForStringIndex的參考討論講述了適用於繪制自定義CTLineGetOffsetForStringIndex圖形偏移。 插入符號可用於顯示插入點或文本選擇。 主要和次要偏移可以被認為是字符串的開始和結束索引 - 字符序列。 如果給定行沒有字符序列,則可能沒有選定的字符,沒有插入符號,沒有字形范圍。 因此沒有“字符串訪問”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM