无法设置drawInRect的字体

时间:2015-09-02 13:28:26

标签: ios objective-c uiview drawinrect

我试图在上下文中绘制文字,但它确实有效。

我试图将UIfont设置为此文本,但它不起作用。文字大小保持不变。

这是我的代码

- (UIImage *)imageByDrawingCircleOnImage:(UIImage *)image
{

UIGraphicsBeginImageContextWithOptions((image.size), NO, [[UIScreen      mainScreen]scale] );

[image drawAtPoint:CGPointZero];
CGContextRef context = UIGraphicsGetCurrentContext();

UIFont *font = [UIFont systemFontOfSize:30];;//[UIFont fontWithName:  @"Helvetica" size:45.0];

CGContextSetRGBStrokeColor(context,  210.0/255.0f, 0.0f, 0.0f, 1.0f);
CGContextSetRGBFillColor(context, 192.0/255.0, 0.0/255.0 , 13.0/255.0, 1.0);

NSMutableParagraphStyle *textStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
textStyle.lineBreakMode = NSLineBreakByWordWrapping;
textStyle.alignment = NSTextAlignmentRight;

NSMutableDictionary *attributes = [NSMutableDictionary dictionary];
[attributes setObject:textStyle forKey:@"NSParagraphStyleAttributeName"];
[attributes setObject:font forKey:@"NSFontAttributeName"];

NSString *string = @"Tour de poitrine : 95 cm";

CGSize string_len =[string sizeWithAttributes:attributes];

[string drawInRect:CGRectMake(245 - string_len.width, 100.0, string_len.width , 100) withAttributes:[NSDictionary dictionaryWithDictionary:attributes]];



UIImage *retImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();
return retImage;
}

由于 亚历山大

3 个答案:

答案 0 :(得分:1)

不要使用字符串作为属性字典键,使用框架提供的常量。

@"NSFontAttributeName"改为NSFontAttributeName,将@"NSParagraphStyleAttributeName"改为NSParagraphStyleAttributeName

答案 1 :(得分:1)

用此替换您的代码。它对我有用。

- (UIImage *)imageByDrawingCircleOnImage:(UIImage *)image

{

UIGraphicsBeginImageContextWithOptions((image.size), NO, [[UIScreen      mainScreen]scale] );

[image drawAtPoint:CGPointZero];
CGContextRef context = UIGraphicsGetCurrentContext();

UIFont *font = [UIFont fontWithName:  @"Chalkduster" size:20.0];

CGContextSetRGBStrokeColor(context,  210.0/255.0f, 0.0f, 0.0f, 1.0f);
CGContextSetRGBFillColor(context, 192.0/255.0, 0.0/255.0 , 13.0/255.0, 1.0);

NSMutableParagraphStyle *textStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
textStyle.lineBreakMode = NSLineBreakByWordWrapping;
textStyle.alignment = NSTextAlignmentRight;


NSString *string = @"Tour de poitrine : 95 cm";

NSDictionary* attributes = @{NSFontAttributeName: font,
                             NSForegroundColorAttributeName: [UIColor redColor],
                             NSParagraphStyleAttributeName: textStyle
                             };


CGSize string_len =[string sizeWithAttributes:attributes];

[string drawInRect:CGRectMake(245 - string_len.width, 100.0, string_len.width , 100) withAttributes:[NSDictionary dictionaryWithDictionary:attributes]];



UIImage *retImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();
return retImage;
}

答案 2 :(得分:0)

试试这个:

//// General Declarations
CGContextRef context = UIGraphicsGetCurrentContext();

//// Text Drawing
CGRect textRect = CGRectMake(CGRectGetMinX(frame) + 23, CGRectGetMinY(frame) + 28, 101, 27);
{
    NSString* textContent = @"Hello, World!";
    NSMutableParagraphStyle* textStyle = NSMutableParagraphStyle.defaultParagraphStyle.mutableCopy;
    textStyle.alignment = NSTextAlignmentLeft;

    NSDictionary* textFontAttributes = @{NSFontAttributeName: [UIFont systemFontOfSize: UIFont.labelFontSize], NSForegroundColorAttributeName: UIColor.blackColor, NSParagraphStyleAttributeName: textStyle};

    CGFloat textTextHeight = [textContent boundingRectWithSize: CGSizeMake(textRect.size.width, INFINITY)  options: NSStringDrawingUsesLineFragmentOrigin attributes: textFontAttributes context: nil].size.height;
    CGContextSaveGState(context);
    CGContextClipToRect(context, textRect);
    [textContent drawInRect: CGRectMake(CGRectGetMinX(textRect), CGRectGetMinY(textRect) + (CGRectGetHeight(textRect) - textTextHeight) / 2, CGRectGetWidth(textRect), textTextHeight) withAttributes: textFontAttributes];
    CGContextRestoreGState(context);
}