[英]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.