[英]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.