Iphone 允许 我们直接用于字体实例变量 的 字体类型(NSString) 有 :
“Arial”,
“Helvetica”,
"Georgia",
"Courier New",
"Marker Felt",
"Times New Roman",
"Trebuchet MS",
"Verdana",
"Zapfino"。
- - (void)computeWidthAndHeight:(CGContextRef) context
- withFont:(NSString *)fontName
- withSize:(NSInteger)fontSize
- string:(NSString *)str
- {
- int strLength = [str length];
- CGFontRef fontRef = CGFontCreateWithFontName((CGStringRef) fontName); // create a system font ref
- if (!fontRef)
- {
- NSLog(@"Warning : missing font %@",fontName);
- return;
- }
- CGRect bbox = CGFontGetFontBBox(fontRef); // return a box that can contain any char with this font
- int units = CGFontGetUnitsPerEm(fontRef); // return how many glyph unit represent a system device unit
- CGFloat height = (((float)bbox.size.height)/((float)units))*fontSize; // compute the char height
- CGContextSaveGState(context); // save current context state
- // use the invisible way to draw the str
- CGPoint left = CGContextGetTextPosition(context); // get the current context position
- CGContextSetTextDrawingMode(context, kCGTextInvisible); // 1 step
- CGContextSetTextMatrix(context, CGAffineTransformIdentity); // 2 step
- CGContextSelectFont(context, [font UTF8String], fontSize, KCGEncodingMacRoman); // 3 step
- // CGContextSetRGBStrokeColor(); // 4 step can be omitted
- // CGContextSetRGBFillColor();
- CGContextShowText(context, [str UTF8String], strLength); // 5 step, default at current position
- // CGContextShowTextAtPoint(); // alse can work
- CGPoint right = CGContextGetTextPosition(context); // get the end context position
- CGContextRestoreGState(context); // restore the before context state
- CGFolat width = right.x - left.x; // compute the char width
- CGFontRelease(fontRef); // release font ref
- }