在objective-c iPhone中在图像上写文本,模拟器的字体大小与iPhone本身不同



我遇到了一些非常奇怪的事情,我正在为图像添加标题,并且在模拟器上一切正常,但在设备本身上字体真的很小......

使用此代码时遇到问题:

-(UIImage*) drawTextOnPic:(NSString*) bottomText
         inImage:(UIImage*)  image
{
UIFont *font = [UIFont boldSystemFontOfSize:48];
UIGraphicsBeginImageContext(image.size);
[image drawInRect:CGRectMake(0,0,image.size.width,image.size.height)];
CGRect = CGRectMake(10.0f,10.0f,image.size.width-20.0f, image.size.height);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetShadow(context, CGSizeMake(2.5f, 2.5f), 5.0f);

[[UIColor whiteColor] set];
[bottomText drawInRect:CGRectIntegral(rect) withFont:font lineBreakMode:UILineBreakModeClip alignment:UITextAlignmentCenter];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}

有人知道为什么它只像我预期的那样在模拟器上工作吗?顺便说一句,我正在使用iOS6的SDK,它可以在那里吗?是视网膜显示器的东西吗?如何解决?

当您调用 UIGraphicsBeginImageContext 时,您应该使用扩展调用来传递屏幕缩放,如下所示:

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

这将在屏幕比例上创建图像上下文。请注意,第二个参数,此处YES,是您是否需要图像不透明。如果图像中有透明度,请将其设置为 NO

我选择默认字体大小(在我的情况下是 48),然后根据一些参考大小(在我的例子中为 640x480)检查图像大小,我通过 sqrtf(area(a)/area(ref)) 然后将这个结果乘以字体大小。这是它对我工作的唯一方式。

希望能帮助其他人...

//  Drawing text on image
+ (UIImage*) drawText:(NSString*)text withColor:(UIColor *) textColor inImage:(UIImage*)image atPoint:(CGPoint)point {
    UIFont *font = [UIFont boldSystemFontOfSize:12];
    UIGraphicsBeginImageContext(image.size);
    [image drawInRect:CGRectMake(0,0,image.size.width,image.size.height)];
    CGRect rect = CGRectMake(point.x, point.y, image.size.width, image.size.height);
    [textColor set];
    [text drawInRect:CGRectIntegral(rect) withFont:font];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

最新更新