我遇到了一些非常奇怪的事情,我正在为图像添加标题,并且在模拟器上一切正常,但在设备本身上字体真的很小......
使用此代码时遇到问题:
-(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;
}