【问题标题】:NSString drawAtPoint withNSString drawAtPoint 与
【发布时间】:2013-07-08 21:05:11
【问题描述】:

我想制作一些带有标签的 UIImage,如果未加载照片,它将显示。 在应用程序中生成此图像更有用,因为它很容易本地化文本。 我有代码:

NSString *text = @"Photo not loaded yet. Please wait.";
UIFont *font = [UIFont boldSystemFontOfSize:35];
CGSize imageSize = CGSizeMake(400, 400);

CGSize constraint = CGSizeMake(imageSize.width * 0.8f, imageSize.height * 0.8f);
CGSize textSize = [text sizeWithFont:font constrainedToSize:constraint lineBreakMode:NSLineBreakByWordWrapping];

UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0.0);

CGPoint pointToDraw = CGPointMake((imageSize.width - textSize.width) / 2, (imageSize.height - textSize.height) / 2);

[text drawAtPoint:pointToDraw forWidth:textSize.width withFont:font lineBreakMode:NSLineBreakByWordWrapping];

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return image;

但它只绘制第一行,就像屏幕截图一样。

我哪里错了?

谢谢。

【问题讨论】:

  • 注销 textSize 至少会告诉您问题出在sizeWithFont:constrainedToSize:lineBreakMode: 返回的大小还是实际绘图。
  • 为什么不添加标签并在图像可用时将其删除?还是活动指标?
  • 使用 UILabel 显示您的消息要容易得多。隐藏 UIImageView(将其 hidden 属性设置为 YES)并显示 UILabel(将 hidden 设置为 NO)。
  • 制作这个UIImage对我来说更容易,因为图像显示在很多地方:我需要在所有地方放置标签或活动指示器,或者只是制作一个简单的UIImage。无论如何,我认为,它应该工作。
  • 您说得对,它应该可以工作(如果您使用正确的方法,它确实可以工作——请参阅我的回答)。而且不管是不是最好的解决方案,想要画一个字符串是完全合理的;这正是 NSString 提供绘图方法的原因。

标签: ios uiimage


【解决方案1】:

来自the documentation-drawAtPoint:forWidth:withFont:

使用指定的字体和属性在当前图形上下文中的指定点处以单行方式绘制字符串。

所以,使用不同的方法。 -drawInRect:withFont:lineBreakMode: 看起来是个不错的候选人。

【讨论】:

  • 谢谢。这是我的错!
猜你喜欢
  • 1970-01-01
  • 2011-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
相关资源
最近更新 更多