Unicode Character Not Showing

后端 未结 4 1764
长发绾君心
长发绾君心 2020-12-17 00:59

I want to display the \"infinity\" symbol using

CGContextSelectFont(context, \"HelveticaNeue\", textSize, kCGEncodingMacRoman);    
CGContextShowTextAtPoint         


        
相关标签:
4条回答
  • 2020-12-17 01:04

    It's worth noting that you can still use the CGContext functions alongside -[NSString drawWithRect:] and its cousins. For example, the following code draws a string (which can include any characters, including the infinity symbol which started this thread) with 50%-opaque black:

    CGContextSaveGState(context);
    CGContextSetRGBFillColor(context, 0, 0, 0, 0.5);
    [self.text drawInRect:targetRect withFont:self.font];
    CGContextRestoreGState(context);
    
    0 讨论(0)
  • 2020-12-17 01:05

    You want to avoid drawInRect:withFont: (in MonoTouch: DrawString (string, RectangelF, UIFont font) as this API up until iPhoneOS 4.0 does not render strings that might contain certain unicode characters (like dingbats) and will silently cut rendering at that point.

    Instead you must use drawInRect:withFont:lineBreakMode:alignment: (in MonoTouch this is the DrawString (string msg, RectangleF rect, UIFont font, UILineBreakMode breakMode, UITextAlignment align) method) as this renders properly.

    In addition, not all fonts on the iPhone is a complete set of fonts, you can use the following reference:

    http://daringfireball.net/misc/2007/07/iphone-osx-fonts

    For a list of fonts that have the complete set of characters.

    0 讨论(0)
  • 2020-12-17 01:08

    It turns out that CGContextSelectFont only supports MacRoman encoding, which is basically has only a small set of characters. In order to display Unicode characters in a string, you have to use CGSetFont or the Cocoa drawing system. CGSetFont requires that you use Cocoa anyway to map characters to glyphs and then draw the glyphs using CGContextShowGlyphsAtPoint. I recommend that you look into other ways to draw these strings if you really need to display Unicode characters.

    This code basically will display the infinity symbol:

    - (void)drawRect:(CGRect)rect {
        unichar inf = 0x221E; // infinity symbol
        NSString* sName = [[NSString alloc] initWithCharacters:&inf length:1];
        UIFont* font = [UIFont fontWithName:@"Helvetica" size:32.0];
        [sName drawInRect:CGRectMake(20, 20, 40, 40)
                 withFont:font];
        [sName release];
    }
    

    Also note that on the iPhone (and on the Mac) Helvetica Neue actually does not exist... its name just maps back to standard Helvetica. See the table at http://daringfireball.net/misc/2007/07/iphone-osx-fonts for more information on available fonts on the iPhone.

    0 讨论(0)
  • 2020-12-17 01:20

    Here's the MonoTouch answer:

    UIGraphics.PushContext (mBmpContext);
    mBmpContext.SetRGBFillColor(1f,1f,1f,1f);
    var font = UIFont.FromName ("Arial", 30);
    using (var nsstr = new NSString ("äöü ÜÖÄ")){
       nsstr.DrawString (new PointF (10, 400), font);
    }
    UIGraphics.PopContext ()
    
    0 讨论(0)
提交回复
热议问题