围绕UIImageView的内容绘制边框

我有一个UIImageView与图像是一个透明背景的汽车:

在这里输入图像说明

我想在车上画一个边框:

在这里输入图像说明

我怎样才能达到这个效果?

目前,我已经用这种方式testing了CoreGraphics,但没有好的结果:

// load the image UIImage *img = carImage; UIGraphicsBeginImageContext(img.size); CGContextRef context = UIGraphicsGetCurrentContext(); [[UIColor redColor] setFill]; CGContextTranslateCTM(context, 0, img.size.height); CGContextScaleCTM(context, 1.0, -1.0); CGContextSetBlendMode(context, kCGBlendModeNormal); CGRect rect = CGRectMake(0, 0, img.size.width * 1.1, img.size.height*1.1); CGContextDrawImage(context, rect, img.CGImage); CGContextClipToMask(context, rect, img.CGImage); CGContextAddRect(context, rect); CGContextDrawPath(context,kCGPathFill); // generate a new UIImage from the graphics context we drew onto UIImage *coloredImg = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 

任何帮助? 谢谢。

以下是我所做的:

我在Swift里做了这个,只是为了在操场上检查一下,认为可以很容易的将它翻译成Objective-C

 import UIKit func drawOutlie(#image:UIImage, color:UIColor) -> UIImage { var newImageKoef:CGFloat = 1.08 var outlinedImageRect = CGRect(x: 0.0, y: 0.0, width: image.size.width * newImageKoef, height: image.size.height * newImageKoef) var imageRect = CGRect(x: image.size.width * (newImageKoef - 1) * 0.5, y: image.size.height * (newImageKoef - 1) * 0.5, width: image.size.width, height: image.size.height) UIGraphicsBeginImageContextWithOptions(outlinedImageRect.size, false, newImageKoef) image.drawInRect(outlinedImageRect) var context = UIGraphicsGetCurrentContext() CGContextSetBlendMode(context, kCGBlendModeSourceIn) CGContextSetFillColorWithColor(context, color.CGColor) CGContextFillRect(context, outlinedImageRect) image.drawInRect(imageRect) var newImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return newImage } var imageIn = UIImage(named: "158jM") var imageOut = drawOutlie(image: imageIn, UIColor.redColor()) 

那么它是怎样工作的?

  1. 我们创build一个干净的上下文(又名canvas),有一个更大的尺寸,然后原始图像(轮廓)
  2. 我们在整个canvas上绘制图像
  3. 我们用颜色填充图像
  4. 我们在上面绘制较小的图像

您可以更改轮廓大小更改此属性: var newImageKoef:CGFloat = 1.08

这是我在游乐场所得到的结果

在这里输入图像说明