簡體   English   中英

將NSString轉換為cString以與CGContextShowTextAtPoint一起使用

[英]Converting a NSString to a cString for use with CGContextShowTextAtPoint

我正在使用CGContextShowTextAtPoint繪制一個String。 因此我需要將我想要繪制的NSString轉換為c字符串。 不幸的是,歐元貨幣符號等特殊符號未正確顯示。

CGContextSelectFont(currentContext, "TrebuchetMS", 15, kCGEncodingMacRoman);

CGContextShowTextAtPoint(currentContext, 0, 0, [myString cStringUsingEncoding:[NSString defaultCStringEncoding]], [myString length]);

我在CGContextSelectFont函數中使用kCGEncodingFontSpecific編碼嘗試了它,但是這也沒有用。

出於性能原因,我需要使用CG函數,而不是NSString提供的drawInRect函數。

也許你可以幫助我!

PS:我知道這是一個經常發布的主題,但我無法弄清楚為什么我不能讓它工作......

您指的“特殊符號”受NSString的Unicode編碼支持,但不支持Core Graphics字體繪制例程使用的MacRoman編碼(您可以使用CGContextSelectFont()設置的唯一兩種編碼是kCGEncodingMacRoman和kCGEncodingFontSpecific)。 這是繪制文本的CGContextShowTextAtPoint()路線的缺點。 因此,每當我需要在Core Graphics上下文中手動繪制文本時,我都會使用NSString的-drawAtPoint:方法。

就性能而言,在對早期答案的評論中,Kyle已經對drawAtPoint進行了基准測試:每秒繪制75次,而CGContextShowTextAtPoint()每秒繪制99次。 這並不是繪制速度的巨大差異,所以你不會通過這種方式獲得很多。 根據我的經驗,-drawAtPoint:對我的應用來說已經足夠快了。

編輯(10/14/2009):正如Sixten Otto指出的那樣,我誤解了自己的代碼。 UTF-8支持完整的字符范圍,字體的MacRoman不支持。

暫無
暫無

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

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