【问题标题】:Write text on image in objective-c iPhone, Font size of simulator different from on iPhone itself在objective-c iPhone中的图像上写入文本,模拟器的字体大小与iPhone本身不同
【发布时间】:2012-07-03 03:19:24
【问题描述】:

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

我在使用这段代码时遇到了问题:

-(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,它可以在那里吗? 与视网膜显示器有关吗?如何解决?

【问题讨论】:

  • 输出定义字体大小的所有内容(CAPTION_FONT_SIZE,image.size)并确保它们相同

标签: objective-c ios ios5 uiimage retina-display


【解决方案1】:

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

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

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

【讨论】:

  • 那行不通。当图像很大时,字体仍然显得非常小。我所做的是根据图片大小确定字体应该有多大并调整它们的大小。它真的不优雅,所以如果你有其他解决方案,我很乐意尝试。
  • 您可能需要将字体大小乘以屏幕比例。
【解决方案2】:

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

希望对他人有所帮助...

【讨论】:

  • 你好,伊丹。我可以询问您的计算示例代码吗?我对你的公式感到困惑。提前致谢
  • @user3818576 这是一个非常古老的解决方案,不确定它是否是计算它的最佳方法。该公式很简单,它只是使您的新屏幕区域(区域 a)与您用于字体大小的屏幕(区域参考)之间有所不同。所以为了更容易理解,如果区域“a”的宽度为 Aw,高度为 Ah,则其面积为 Aw x Ah。如果您使用 640x480 作为参考尺寸,则等式将是 Sqrt((Aw x Ah)/(640x480))。 Sqrt 均方根。
【解决方案3】:
//  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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    相关资源
    最近更新 更多