Objective-C:在UIImage上绘制边框

时间:2017-06-26 06:49:32

标签: ios objective-c uiimageview uiimage

我目前有以下图片,我正在尝试设置边框。它由一个UIImageView组成,里面有一个图像(transparent.png

当我尝试为我的图片设置边框时(请参阅代码),它为UIImage提供了边框,但它没有'快照'围绕着我的形象。是否有可能实现这种效果?

See image current implementation here.

- (UIImage*)imageWithBorderFromImage:(UIImage*)source;
{
  CGSize size = [source size];
  UIGraphicsBeginImageContext(size);
  CGRect rect = CGRectMake(0, 0, size.width, size.height);
  [source drawInRect:rect blendMode:kCGBlendModeNormal alpha:1.0];

  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextSetRGBStrokeColor(context, 1.0, 0.5, 1.0, 1.0); 
  CGContextStrokeRect(context, rect);
  UIImage *testImg =  UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  return testImg;
}  

2 个答案:

答案 0 :(得分:0)

尝试在UIImageView后面添加一个图层,并为其添加一个可以解决问题的边框

#define kBorderWidth 3.0.   
#define kCornerRadius 8.0
CALayer *borderLayer = [CALayer layer];
CGRect borderFrame = CGRectMake(0, 0, (imageView.frame.size.width),    (imageView.frame.size.height));
[borderLayer setBackgroundColor:[[UIColor clearColor] CGColor]];
[borderLayer setFrame:borderFrame];
[borderLayer setCornerRadius:kCornerRadius];
[borderLayer setBorderWidth:kBorderWidth];
[borderLayer setBorderColor:[[UIColor redColor] CGColor]];
[imageView.layer addSublayer:borderLayer];

不要忘记导入QuartzCore / QuartzCore.h

此示例将在图层上绘制一个边框,但稍微更改它的边框以在图层周围创建边框。

答案 1 :(得分:0)

根据您的需求,如果您不希望它尽可能准确,那么快速而肮脏的解决方案可能是这样的:

- (UIImage *)borderedImageFromImage:(UIImage *)source andColor:(UIColor *)borderColor{
    CGFloat scale = 0.95;//this determines how big the border will be, the smaller it is the bigger the border
    UIImage *borderImage = [source imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
    UIGraphicsBeginImageContextWithOptions(source.size, NO, source.scale);
    [borderColor set];
    [borderImage drawInRect:CGRectMake(0, 0, source.size.width, source.size.height)];
    [source drawInRect:CGRectMake(source.size.width*(1-scale)/2,
                                  source.size.height*(1-scale)/2,
                                  source.size.width * scale,
                                  source.size.height * scale)];
    borderImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return borderImage;
}

以下是如何使用它:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    self.heartImageView.image = [self borderedImageFromImage:[UIImage imageNamed:@"heart"] andColor:[UIColor blackColor]];

}

这基本上做的是绘制你想要的图像两次,一次是边框的颜色(略微缩放),一次是正常颜色。您的里程可能因图像而异。