在UIImageView周围设置边框

17

我想在一个 UIImageView 上应用两种类型的边框:

  1. 一种是在 UIImageViewlayer 上的边框。
  2. 第二个是围绕 UIImageViewlayer 的边框。

我该怎么做呢?

4个回答

32

尝试一下

#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

这个例子将在图层上绘制一个边框,但会轻微改变它的框架以使边框围绕着图层。


谢谢您的回复。我尝试了这段代码,但它在UIImageView内创建了边框,而我想从UIImageView外设置边框。 - Girish
5
只需将框架更改为您想要的“外部”量:CGRect borderFrame = CGRectMake(-1.0,                                 -1.0,                                 imageView.frame.size.width + 2.0,                                 imageView.frame.size.height + 2.0); - Andrew Bennett
1
如果您想将边框放在imageView的外部,请确保将clipsToBounds设置为false。 - scott
关于圆形图片,你是否需要启用clipToBounds呢? - daisy

9
另一种方法
你必须导入。
#import <QuartzCore/QuartzCore.h>

然后添加UIImageView的代码

imgView.clipsToBounds = YES;
imgView.layer.cornerRadius = 8.0;
imgView.layer.borderWidth = 2.0;
imgView.layer.borderColor = [UIColor greenColor].CGColor;

这只创建了一个边框层,OP要求两个。 - daisy
简单而优雅的完美解决方案 - Matthew Usdin

2
另一种方法是添加另一层,该层略微超出UIImageView的层,如下所示:
CALayer * externalBorder = [CALayer layer];
externalBorder.frame = CGRectMake(-1, -1, myView.frame.size.width+2, myView.frame.size.height+2);
externalBorder.borderColor = [UIColor blackColor].CGColor;
externalBorder.borderWidth = 1.0;

[myView.layer addSublayer:externalBorder];
myView.layer.masksToBounds = NO;

0

Swift 5

注意使用UIImageView时要小心;masksToBounds = false意味着图像会溢出

let outsideBorder = CALayer()
outsideBorder.frame = CGRect(x: -1, y: -1, width: myView.frame.size.width+2, height: myView.frame.size.height+2)
outsideBorder.borderColor = UIColor.black.cgColor
outsideBorder.borderWidth = 1.0

myView.layer.addSublayer(outsideBorder)
myView.masksToBounds = false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接