【发布时间】:2014-12-17 14:11:55
【问题描述】:
所以我试图将图像和文本都插入到 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;
}
【问题讨论】:
-
放错地方怎么办?你能描述一下出了什么问题吗?我很高兴运行您的代码并查看它的作用,但我应该寻找什么问题?毕竟,图像和字符串可能正好放置在您的代码放置它们的位置,那么如果您的代码没有表达它,我怎么知道您的意图呢?
-
实际上我的标题远低于该段,所以几乎使它不可见......并且对于图像我给出 x = 50 值。所以它不理想不是吗? .我的意思是给出硬编码的值。但我现在还不知道另一种方法。
-
好的,所以问题不在于图像和字符串被绘制“错位”,而是整个东西不能很好地适合一个片段?
-
请问:你为什么用CGContextDrawImage?如果您只是告诉 UIImage 自己绘制,您可以避免整个“翻转”问题。不会简单很多吗?然后放置图像也会更容易。
-
这真的是您的意思吗:
int height = MAX(expectedTextSize.height, image.size.width);您想将图像的height 基于原始图像的width?真的吗?
标签: ios cocoa-touch cgcontextdrawimage