iOS:在UIImage上绘制NSString和边框

我想在我已经拥有的UIImage上绘制一个NSString和一个边框。 我发现了一个将NSString绘制为UIImage的方法,但我需要它来绘制我提供的图像。

-(UIImage *)imageFromText:(NSString *)text { // set the font type and size UIFont *font = [UIFont systemFontOfSize:20.0]; CGSize size = [text sizeWithFont:font]; // check if UIGraphicsBeginImageContextWithOptions is available (iOS is 4.0+) if (UIGraphicsBeginImageContextWithOptions != NULL) UIGraphicsBeginImageContextWithOptions(size,NO,0.0); else // iOS is < 4.0 UIGraphicsBeginImageContext(size); // optional: add a shadow, to avoid clipping the shadow you should make the context size bigger // // CGContextRef ctx = UIGraphicsGetCurrentContext(); // CGContextSetShadowWithColor(ctx, CGSizeMake(1.0, 1.0), 5.0, [[UIColor grayColor] CGColor]); // draw in context, you can use also drawInRect:withFont: [text drawAtPoint:CGPointMake(0.0, 0.0) withFont:font]; // transfer image UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } 

如何修改此方法以提供我自己的背景图像,以及添加边框?

如果您在UIImageView中显示UIImage,您可以设置UIImageView.layer.delegate并使用如下内容:

 - (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx { CGContextSetFillColorWithColor(ctx, [[UIColor darkTextColor] CGColor]); UIGraphicsPushContext(ctx); [word drawAtPoint:CGPointMake(30.0f, 30.0f) forWidth:200.0f withFont:[UIFont boldSystemFontOfSize:32] lineBreakMode:UILineBreakModeClip]; UIGraphicsPopContext(); } 

代码从添加文本到CALayer

边框很简单,只需使用CALayer属性:

 imageview.layer.borderColor = [UIColor blackColor].CGColor; imageview.sublayer.borderWidth = 2.0; 

您正在寻找CALayers。

这是非常好的教程如何创建和使用它们。

所以基本上你会添加新的CALayer,将图像作为背景,然后在其上绘制文本。

http://www.raywenderlich.com/2502/introduction-to-calayers-tutorial

使用此函数在UIImage上绘制NSString和边框
用于边框检查CGContextSetRGBStrokeColor

 -(UIImage *)imageFromText:(NSString *)text { // set the font type and size UIFont *font = [UIFont systemFontOfSize:20.0]; CGSize size = [text sizeWithFont:font]; // check if UIGraphicsBeginImageContextWithOptions is available (iOS is 4.0+) if (UIGraphicsBeginImageContextWithOptions != NULL) UIGraphicsBeginImageContextWithOptions(size,NO,0.0); else // iOS is < 4.0 UIGraphicsBeginImageContext(size); // optional: add a shadow, to avoid clipping the shadow you should make the context size bigger // CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextSetShadowWithColor(ctx, CGSizeMake(1.0, 1.0), 5.0, [[UIColor brownColor] CGColor]); // draw in context, you can use also drawInRect:withFont: [text drawAtPoint:CGPointMake(0.0, 0.0) withFont:font]; //CGImageRef cimg = UIGraphicsGetCurrentContext(); // transfer image UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height); [image drawInRect:rect blendMode:kCGBlendModeNormal alpha:1.0]; //CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetRGBStrokeColor(ctx, 2.0, 3.5, 5.0, 1.0); CGContextStrokeRect(ctx, rect); UIImage *testImg = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return testImg; }