在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]); 

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

我select默认的字体大小(在我的情况下是48),然后根据一些ref size(在我的情况下是640×480)检查图像大小,我是通过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; }