Установить границу вокруг UIImageView

17

Я хочу применить два типа границы на UIImageView :

  1. Один из них - это граница layer UIImageView .
  2. Во-вторых, это граница вокруг layer UIImageView .

Как я могу это сделать?

    
задан Girish 25.06.2012 в 17:20
источник

3 ответа

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

В этом примере будет рисовать рамку на слое, но слегка измените ее, чтобы сделать границу вокруг слоя.

    
ответ дан Jonathan King 25.06.2012 в 20:16
  • Спасибо за ваш ответ. Я пробовал этот код, но он создает границу внутри UIImageView, но я хочу установить границу извне UIImageView. –  Girish 26.06.2012 в 07:47
  • Просто измените кадр на любое количество «снаружи», которое вам нравится: CGRect borderFrame = CGRectMake (-1.0, -1.0, imageView.frame.size.width + 2.0, imageView.frame.size.height + 2.0); –  Andrew Bennett 03.03.2014 в 20:09
  • Обязательно установите для clipToBounds значение false, если вы пытаетесь поместить границу за пределы imageView –  scott 26.06.2015 в 00:39
  • Как насчет круговых изображений, где вам нужно включить clipToBounds? –  daisy 29.05.2016 в 09:43
8

Другой способ

Вы должны импортировать

#import <QuartzCore/QuartzCore.h>

Затем добавьте код для вашего UIImageView

imgView.clipsToBounds = YES;
imgView.layer.cornerRadius = 8.0;
imgView.layer.borderWidth = 2.0;
imgView.layer.borderColor = [UIColor greenColor].CGColor;
    
ответ дан Salim 09.04.2015 в 11:39
  • Это не работает. –  scott 25.06.2015 в 22:41
  • Это создает только один слой границы, OP запрашивает два. –  daisy 29.05.2016 в 09:39
  • простой и элегантный. идеальное решение –  mattyU 08.11.2017 в 17:50
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;
    
ответ дан Hugues Duvillier 10.11.2015 в 07:00