简体   繁体   English

在 iOS 13 中的图像上绘制文本

[英]Draw text on an image in iOS 13

I am trying to draw an image and some text on a UISlider thumbnail.我正在尝试在 UISlider 缩略图上绘制图像和一些文本。 I have the following code that works fine on iOS 12 and below, but does not on iOS 13 and above(specifically iOS 13.2).我有以下代码在 iOS 12 及更低版本上运行良好,但在 iOS 13 及更高版本(特别是 iOS 13.2)上不起作用。

- (UIImage*)getSliderImageWithImage:(UIImage*)bgImage valueText:(NSString*)value {

  CGFloat scale = 5.0;
  //Drawing BG Image
  // Where bg image is some image on top of which i need to render text. 
  UIGraphicsBeginImageContextWithOptions(CGSizeMake(bgImage.size.width * scale, bgImage.size.height * scale), NO, 1);

  // This works
  [bgImage drawInRect:CGRectMake(0, 0, bgImage.size.width * scale, bgImage.size.height * scale)];


  CGRect valueBgRect;
  UIColor * textColor;
  UIFont * textFont;

  textColor = [UIColor whiteColor];
  valueBgRect = CGRectMake(18,40, bgImage.size.width,bgImage.size.height);
  textFont = [UIFont fontWithName:@"Helvetica-Bold" size:50];

  NSDictionary *attrsValue = @{ NSForegroundColorAttributeName : textColor,
                         NSFontAttributeName            : textFont,
                         NSTextEffectAttributeName      : NSTextEffectLetterpressStyle};
  // This doesn't.
  [value drawInRect:valueBgRect withAttributes:attrsValue];
  // Though I can see the image, the text that should be on top of it is not visible. 
  UIImage *theImage=UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  return theImage; }

I also tried setting the text on a UILabel and rendering using我还尝试在 UILabel 上设置文本并使用渲染

[view.layer renderInContext:UIGraphicsGetCurrentContext()];

and

[self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:YES];

But none of these work.但这些都不起作用。 Since this a very common scenario, I am surprised that I cannot find any mention of such an issue in iOS 13.2.由于这是一个非常常见的场景,我很惊讶在 iOS 13.2 中找不到任何提及此类问题的内容。 That leads met to think that I must be looking at it the wrong way.这导致见面认为我必须以错误的方式看待它。 Can anyone please help ?任何人都可以帮忙吗?

It's working in iOS 13它适用于 iOS 13

在此处输入图片说明

 _imgView.image = [self drawFront:[UIImage imageNamed:@"chain_image.jpeg"] text:@"SANKET VAGHELA" atPoint:CGPointMake(50, 50)];

Call this function.调用这个函数。

    -(UIImage*)drawFront:(UIImage*)image text:(NSString*)text atPoint: 
   (CGPoint)point
{
    UIFont *font = [UIFont systemFontOfSize:20];
    UIGraphicsBeginImageContext(image.size);
    [image drawInRect:CGRectMake(0,0,image.size.width,image.size.height)];
    CGRect rect = CGRectMake(point.x, (point.y - 5), image.size.width, image.size.height);
    [[UIColor whiteColor] set];

    NSMutableAttributedString* attString = [[NSMutableAttributedString alloc] initWithString:text];
    NSRange range = NSMakeRange(0, [attString length]);

    [attString addAttribute:NSFontAttributeName value:font range:range];
    [attString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:range];

    NSShadow* shadow = [[NSShadow alloc] init];
    shadow.shadowColor = [UIColor darkGrayColor];
    shadow.shadowOffset = CGSizeMake(1.0f, 1.5f);
    [attString addAttribute:NSShadowAttributeName value:shadow range:range];

    [attString drawInRect:CGRectIntegral(rect)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM