在分段控制ios中居中图像和垂直居中?

时间:2014-12-17 14:11:55

标签: ios cocoa-touch cgcontextdrawimage

所以我试图将图片和文字都插入到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;
}

1 个答案:

答案 0 :(得分:0)

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

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

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

因此,如果图片尺寸错误,您需要更改计算widthheight的方式。我建议你做的只是你正在做的事情的反面。不要让图像和文字告诉你该做什么,而是从你真正想要的尺寸开始,使图像很好地适合你的片段,然后在绘制时将图像和文字放入其中。