2011-10-18 54 views
3

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

-(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; 
} 

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

回答

5

如果你是在一个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(); 
} 

代码从Add text to CALayer

边界很容易,只需使用CALayer属性:

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

很大,但最后我用UIButton的更换UIImage的,它有一个背景图片,也可以在其上添加Label.text。 – meadlai

1

使用此功能绘制的NSString和边界上的UIImage
边境检查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; 
} 

+0

请通过提出更好的问题来获得更好的答案:http://stackoverflow.com/questions/how-to-ask –