0

我正在尝试在 UISlider 缩略图上绘制图像和一些文本。我有以下代码在 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; }

我还尝试在 UILabel 上设置文本并使用

[view.layer renderInContext:UIGraphicsGetCurrentContext()];

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

但这些都不起作用。由于这是一个非常常见的场景,我很惊讶在 iOS 13.2 中找不到任何提及此类问题的内容。这导致人们认为我一定是以错误的方式看待它。有人可以帮忙吗?

4

1 回答 1

1

它在 iOS 13 中运行

在此处输入图像描述

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

调用这个函数。

    -(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;
}
于 2019-12-03T11:10:20.930 回答