0

所以我试图将图像和文本都插入到UISegmentControl. 现在,segmentControl我希望将图像放在顶部,将文本放在底部。所以我使用 UIImage 上的一个类别将标题放在它上面,如下所示。但是我的图像和经过大量的努力,文本仍然放错了位置。有没有人正确地这样做过?任何帮助表示赞赏。

 + (id)imageFromImage:(UIImage*)image string:(NSString*)string color:(UIColor*)color
{

  UIFont *font = [UIFont fontWithName:@"Helvetica" size:16];
  CGSize expectedTextSize = [string sizeWithAttributes:@{NSFontAttributeName: font}];
  int width = expectedTextSize.width + image.size.width + 5;
  int height = MAX(expectedTextSize.height, image.size.width);
  CGSize size = CGSizeMake((float)width, (float)height);
  UIGraphicsBeginImageContextWithOptions(size, NO, 0);

  CGContextRef context = UIGraphicsGetCurrentContext();

  CGContextSetFillColorWithColor(context, color.CGColor);

  int fontTopPosition = (height + expectedTextSize.height) / 2;

  CGPoint textPoint = CGPointMake(image.size.width/2, fontTopPosition);

  [string drawAtPoint:textPoint withAttributes:@{NSFontAttributeName: font}];
  // Images upside down so flip them
  CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, size.height);
  CGContextConcatCTM(context, flipVertical);

  CGContextDrawImage(context, (CGRect){ {50,0},{image.size.width-10,image.size.height-10}}, [image CGImage]);

  UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  return newImage;
}
4

1 回答 1

0

我不会为你重写你的代码,但我绝对想告诉你走出困境的路。第一步是停止使用CGContextDrawImage,因为这会涉及到“翻转”和转换的复杂性。你应该摆脱这一切。要将图像绘制到图像中,只需绘制它!使用 UIImage 方法drawAtPoint:或(如果您需要随时调整大小)drawInRect:。然后,您可以轻松地将图像准确地放置在您想要的位置。

我也关心你的最终形象应该有多大的整个问题。您正在创建图像的最终尺寸:

CGSize size = CGSizeMake((float)width, (float)height);
UIGraphicsBeginImageContextWithOptions(size, NO, 0);

因此,如果图像的尺寸错误,您需要更改计算方式,width并且height. 我建议你做的与你现在做的正好相反。与其让图像和文本告诉您该做什么,不如从您真正想要的大小开始,以使图像很好地适合您的片段,然后在绘制时将图像和文本放入其中。

于 2014-12-17T14:28:33.290 回答