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ステップ 1 は、「反転」と変換の複雑さに巻き込まれるため、 の使用を停止することです。あなたはそれをすべて取り除くべきです。画像に画像を描画するには、画像を描画するだけです! UIImage メソッドdrawAtPoint:または (サイズを変更する必要がある場合) を使用しますdrawInRect:。その後、画像を必要な場所に簡単に配置できます。

私はまた、あなたの究極のイメージがどのくらいの大きさであるべきかという問題全体についても心配しています. 画像の最終的なサイズを作成しています:

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

したがって、画像のサイズが間違っている場合は、その計算方法を変更する必要がありwidthますheight。私があなたに提案したいことは、あなたが今していることの正反対です。画像とテキストで何をすべきかを説明する代わりに、セグメントにうまく収まるように実際に必要なサイズの画像から始めて、描画しながら画像とテキストをそれに合わせます。

于 2014-12-17T14:28:33.290 に答える