objective-c - 在 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;
}

有人知道为什么它只在模拟器上运行,就像我所期望的那样? 我正在使用,的SDK,可以是什么? 这是 Retina 显示器的东西? 如何修复?

时间:

调用 UIGraphicsBeginImageContext 时,你应该使用扩展调用以通过屏幕缩放,如下所示:


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

这将在屏幕的缩放范围内创建图像上下文。 注意,第二个参数,这里是 YES,是否需要图像是不透明的。 如果图像中有透明,请将它的设置为 NO

然后,根据ref大小( 在我的案例 640 x480 ),然后将图像大小按( 我的情况是 48 )/面积( 引用) 检查,然后将这个结果乘以字体大小。 这是我唯一的方法。

希望对其他人有帮助。


//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;
}

...