我需要 UIImage 上的圆形和文本,我已经用文本实现了正方形,但无法使其圆形

Posted

技术标签:

【中文标题】我需要 UIImage 上的圆形和文本,我已经用文本实现了正方形,但无法使其圆形【英文标题】:I need round and text on UIImage, i already achieved square with text but not able to make it round 【发布时间】:2017-07-12 06:25:07 【问题描述】:

我需要像这张图片一样在 UIImage 上的圆形和文字 Sample Image here

这是我已经实现的代码,但方形不是圆形,我需要围绕文本进行圆形。

+(UIImage*)drawText:(NSString*)text inImage:(UIImage*)image atPoint:(CGPoint)point


    UIFont *font = [UIFont boldSystemFontOfSize:50];
    UIGraphicsBeginImageContext(image.size);
    [image drawInRect:CGRectMake(0,0,image.size.width,image.size.height)];
    CGRect rect = CGRectMake(point.x - 10, point.y - 10, image.size.width, image.size.height);
    [text drawInRect:CGRectIntegral(rect) withAttributes:@NSFontAttributeName:font,NSBackgroundColorAttributeName:[UIColor colorWithRed:0.26 green:0.32 blue:0.59 alpha:1.0],NSForegroundColorAttributeName:[UIColor whiteColor]];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;

提前致谢。

【问题讨论】:

【参考方案1】:

做这样的事情:

- (void)viewDidLoad 
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    self.imgview.image = [ViewController drawText:@"ios" inImage:[UIImage imageNamed:@"eye"] atPoint:CGPointMake(30 , 30)];
    self.imgview.layer.cornerRadius = self.imgview.frame.size.height/2;
    self.imgview.clipsToBounds = YES;




+ (UIImage*)drawText:(NSString*)text inImage:(UIImage*)image atPoint:(CGPoint)point

    UIFont *font = [UIFont boldSystemFontOfSize:20];
    UIGraphicsBeginImageContext(image.size);
    [image drawInRect:CGRectMake(0,0,image.size.width,image.size.height)];
    CGRect rect = CGRectMake(point.x - 10, point.y - 10, image.size.width, image.size.height);
    [text drawInRect:CGRectIntegral(rect) withAttributes:@NSFontAttributeName:font,NSBackgroundColorAttributeName:[UIColor colorWithRed:0.26 green:0.32 blue:0.59 alpha:1.0],NSForegroundColorAttributeName:[UIColor whiteColor]];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;

更新

为此,您必须添加更多逻辑,如下所示。

- (void)viewDidLoad 
    [super viewDidLoad];
    self.imgview.image = [ViewController drawText:@"iOS Dev" inImage:[UIImage imageNamed:@"Lion"] bgCircleRect:CGRectMake(15, 15, 100, 100)];


+ (UIImage*)drawText:(NSString*)text inImage:(UIImage*)image bgCircleRect:(CGRect) bgCircleRect

    UIFont *font = [UIFont boldSystemFontOfSize:20];
    UIGraphicsBeginImageContext(image.size);
    [image drawInRect:CGRectMake(0,0,image.size.width,image.size.height)];

    CGRect rect = CGRectMake(bgCircleRect.origin.x+10, bgCircleRect.origin.y+35, bgCircleRect.size.width, bgCircleRect.size.height);

    UIBezierPath* path = [UIBezierPath bezierPathWithRoundedRect: bgCircleRect cornerRadius: 50];
    [UIColor.redColor setFill];
    [path fill];

    [text drawInRect:CGRectIntegral(rect) withAttributes:@NSFontAttributeName:font,NSBackgroundColorAttributeName:[UIColor redColor],NSForegroundColorAttributeName:[UIColor whiteColor]];

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

    return newImage;

输出

【讨论】:

我需要像这张图片一样用圆形绘制文字i.stack.imgur.com/N9DXQ.png @Prashant 请查看我的更新,您可以这样做。 伟大的@Prashant【参考方案2】:

为了使UIImageView变成圆形,首先检查长宽是否相同,然后在viewDidLoad()中应用如下代码

yourpic.layer.cornerRadius = yourpic.frame.size.width / 2;
yourpic.clipsToBounds = YES;

我认为这样就可以了。

【讨论】:

您首先将 uiimage 视图设为圆形。包含文字的标签可以放在图像视图中并给出适当的约束。我发布的代码将使图像视图变圆 好吧,你需要的是你想要在你的图像视图中的圆形文本是吗?? 我不希望 imageview 是圆形的,请检查我在评论中给出的 url。一旦我点击图像,然后我需要用文字制作那个蓝色圆圈。 为此,您需要使用点击手势和视图进行处理。我会尝试找出代码。无论如何对不起错误的答案 只需查看此链接,这可能会对您有所帮助。在手势处理程序中放置一个使视图出现和消失的代码 (***.com/questions/17389683/…)【参考方案3】:

我认为您正在寻找拐角半径:

+(void)drawText:(NSString*)text inImage:(UIImage*)image atPoint:(CGPoint)point
UIImageView *imageView = [[UIImageView alloc] init];
UIFont *font = [UIFont boldSystemFontOfSize:50];
UIGraphicsBeginImageContext(image.size);
[image drawInRect:CGRectMake(0,0,image.size.width,image.size.height)];
CGRect rect = CGRectMake(point.x - 10, point.y - 10, image.size.width, image.size.height);
[text drawInRect:CGRectIntegral(rect) withAttributes:@NSFontAttributeName:font,NSBackgroundColorAttributeName:[UIColor colorWithRed:0.26 green:0.32 blue:0.59 alpha:1.0],NSForegroundColorAttributeName:[UIColor whiteColor]];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
imageView.center = point;
imageView.image = newImage; 

将图像添加到 imageView 并将其作为子视图添加到主视图

【讨论】:

newImage 是 UIImage 而不是 UIImageView,UIImage 没有像 layer 或 frame 这样的属性。 哦,为你的 imageView 做吧 这张图片并不能解释你到底想要什么

以上是关于我需要 UIImage 上的圆形和文本,我已经用文本实现了正方形,但无法使其圆形的主要内容,如果未能解决你的问题,请参考以下文章

如何在 uiimage iOS 中围绕眼睛和嘴巴绘制正方形或圆形

在 UIImage 周围放置圆形框架的最简单方法

UITableViewCell 上的圆形 UIImageView 在首次加载时不起作用

通过单击按钮交替更改圆形按钮背景和文本

UITableView 上的圆角

图像变得拉伸,同时制作椭圆形的uiimage