Por acaso, se alguém conseguir ouvir uma pesquisa no google (como eu fiz) e estiver procurando adicionar uma borda ao UIImageView, procure a resposta por @mclin na parte inferior. Funciona bem!
Mahendra Liya
Respostas:
241
Com o SO> 3.0, você pode fazer isso:
//you need this import#import <QuartzCore/QuartzCore.h>[imageView.layer setBorderColor:[[UIColor blackColor]CGColor]];[imageView.layer setBorderWidth:2.0];
Ao ajustar as imagens no imageView acima, a imagem é exibida perfeitamente, mas os lados da imagem são deixados em branco e o mesmo acontece com a parte superior e inferior da imagem quando a imagem é paisagem. O espaço em branco parece feio com a borda definida. Você enfrentou esse problema? Se sim, por favor sugerir um método para resolver este
Conheça
@Hamutsi imageView.image = myImage;
Kry Clegg
6
Sim você pode. Instâncias de UIImagepodem ser desenhadas em um contexto gráfico com CoreGraphics.
Mark Adams
Como o @rockstar aponta, pode ser necessário adicionar imageView.layer.masksToBounds = YES;
Este código produzirá uma borda rosa ao redor da imagem. No entanto, se você deseja exibir apenas a borda, use a camada da UIImageViewe defina sua borda.
Como você especifica a largura da borda que deseja?
Patrick
16
CGContextSetLineWidth
Marcus S. Zarra
@ MarcusS.Zarra Sei que eles não existiam quando essa pergunta foi respondida, mas essa solução não leva em consideração a tela Retina. Se você pudesse revê-la eu ficaria muito grato :)
Lucas
@lukech A amostra não precisa ser revisada. Apenas aumente a largura da linha se você estiver em um dispositivo de retina.
Marcus S. Zarra
2
O sizeé 320x480 independentemente de se você está ou não em um dispositivo Retina, então quando você salvar a imagem, ele salva com essa resolução 320x480px, não 640x960.
Hack brilhante, especialmente quando se trata de uso de memória - as outras respostas precisarão de 2x de memória apenas para adicionar momentaneamente essa borda. Dica profissional - Se você deseja apenas adicionar uma borda de um lado, também pode alterar os limites. Ótima resposta!
judepereira
11
Se você conhece as dimensões da sua imagem, adicionar uma borda à camada do UIImageView é a melhor solução para o AFAIK. De fato, você pode simplesmente definir o Quadro da imagem para x, y, tamanho da imagem, largura, tamanho da imagem. Altura
Caso você tenha um ImageView de tamanho fixo com imagens carregadas dinamicamente e que sejam redimensionadas (ou dimensionadas para o AspectFit), seu objetivo é redimensionar a visualização de imagem para a nova imagem redimensionada.
A maneira mais curta de fazer isso:
// containerView is my UIImageView
containerView.layer.borderWidth =7;
containerView.layer.borderColor =[UIColor colorWithRed:0.22 green:0.22 blue:0.22 alpha:1.0].CGColor;// this is the key command[containerView setFrame:AVMakeRectWithAspectRatioInsideRect(image.size, containerView.frame)];
Mas para usar o AVMakeRectWithAspectRatioInsideRect, você precisa adicionar este
#import <AVFoundation/AVFoundation.h>
importar a declaração para o seu arquivo e também incluir a estrutura AVFoundation em seu projeto (fornecido com o SDK).
Você não pode adicionar uma borda, mas isso funcionaria para o mesmo efeito. Você também pode transformar o UIView chamado blackBG neste exemplo em um UIImageView com uma imagem de borda e um meio em branco e, em seguida, terá uma borda de imagem personalizada em vez de apenas preto.
Foi isso que acabei fazendo; aninhando meu UIImageViewno centro de um pouco maior UIViewda cor da minha moldura.
precisa
6
todas essas respostas funcionam bem, mas adicionam um ret a uma imagem. Suponha que você tenha uma forma (no meu caso, uma borboleta) e que deseje adicionar uma borda (uma borda vermelha):
precisamos de duas etapas: 1) pegue a imagem, converta em CGImage, passe para uma função para desenhar fora da tela em um contexto usando CoreGraphics e devolva uma nova CGImage
-(void)viewDidLoad
{[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.CGRect frame =CGRectMake(0,0,160,122);UIImage* img =[UIImage imageNamed:@"butterfly"];// take low res OR high res, but frame should be the low-res one.
imgV =[[UIImageView alloc]initWithFrame:frame];[imgV setImage: img];
imgV.center = self.view.center;[self.view addSubview: imgV];
frame.size.width = frame.size.width *1.3;
frame.size.height = frame.size.height*1.3;CGImageRef cgImage =[ViewController createResizedCGImage:[img CGImage] toWidth:frame.size.width andHeight: frame.size.height ];
imgV2 =[[UIImageView alloc]initWithFrame:frame];[imgV2 setImage:[UIImage imageWithCGImage:cgImage]];// release:if(cgImage)CGImageRelease(cgImage);[self.view addSubview: imgV2];
}
Eu adicionei uma borboleta normal e uma borboleta maior com borda vermelha.
Você pode manipular a imagem em si, mas uma maneira muito melhor é simplesmente adicionar uma UIView que contenha o UIImageView e alterar o plano de fundo para preto. Em seguida, defina o tamanho dessa exibição de contêiner para um pouco maior que o UIImageView.
Será que vai funcionar com um tamanho diferente de imagens que mudam em tempo real? O UIImageView mudará o tempo todo e o UIView? ps Manipular a imagem em si será ótima.
2128 Shay
Você precisaria ajustar o quadro da vista que continha a imagem - você poderia salvar as propriedades do centro para as duas vistas, ajustar o tamanho da imagem, ajustar o tamanho do contêiner e redefinir as propriedades do centro para ambas.
Kendall Helmstetter Gelner
Foi exatamente assim que fiz, em vez de traçar o caminho com o CG. apenas parecia mais fácil.
Corey Floyd
2
Outra maneira é fazer diretamente do designer.
Selecione sua imagem e vá em "Mostrar o inspetor de identidade".
Aqui você pode adicionar manualmente " Atributos de tempo de execução definidos pelo usuário" :
Eu criei uma classe que adiciona uma borda ao imageView h. Use esta classe em vez de UIImageView.Eu dei um preenchimento de 4. Você pode dar conforme seu desejo.
Respostas:
Com o SO> 3.0, você pode fazer isso:
fonte
UIImage
podem ser desenhadas em um contexto gráfico com CoreGraphics.Você pode fazer isso criando uma nova imagem (também respondida em sua outra postagem desta pergunta):
Este código produzirá uma borda rosa ao redor da imagem. No entanto, se você deseja exibir apenas a borda, use a camada da
UIImageView
e defina sua borda.fonte
CGContextSetLineWidth
size
é 320x480 independentemente de se você está ou não em um dispositivo Retina, então quando você salvar a imagem, ele salva com essa resolução 320x480px, não 640x960.Este código pode ser usado para adicionar
UIImageView
borda de exibição.fonte
fonte
Se você conhece as dimensões da sua imagem, adicionar uma borda à camada do UIImageView é a melhor solução para o AFAIK. De fato, você pode simplesmente definir o Quadro da imagem para x, y, tamanho da imagem, largura, tamanho da imagem. Altura
Caso você tenha um ImageView de tamanho fixo com imagens carregadas dinamicamente e que sejam redimensionadas (ou dimensionadas para o AspectFit), seu objetivo é redimensionar a visualização de imagem para a nova imagem redimensionada.
A maneira mais curta de fazer isso:
Mas para usar o AVMakeRectWithAspectRatioInsideRect, você precisa adicionar este
importar a declaração para o seu arquivo e também incluir a estrutura AVFoundation em seu projeto (fornecido com o SDK).
fonte
Você não pode adicionar uma borda, mas isso funcionaria para o mesmo efeito. Você também pode transformar o UIView chamado blackBG neste exemplo em um UIImageView com uma imagem de borda e um meio em branco e, em seguida, terá uma borda de imagem personalizada em vez de apenas preto.
fonte
UIImageView
no centro de um pouco maiorUIView
da cor da minha moldura.todas essas respostas funcionam bem, mas adicionam um ret a uma imagem. Suponha que você tenha uma forma (no meu caso, uma borboleta) e que deseje adicionar uma borda (uma borda vermelha):
precisamos de duas etapas: 1) pegue a imagem, converta em CGImage, passe para uma função para desenhar fora da tela em um contexto usando CoreGraphics e devolva uma nova CGImage
2) converta em uiimage de volta e desenhe:
}
}
Eu adicionei uma borboleta normal e uma borboleta maior com borda vermelha.
fonte
Você pode adicionar borda ao UIImageView e alterar o tamanho do UIimageView de acordo com o tamanho da imagem:
Certifique-se de definir a origem da imagem no centro
fonte
Você pode manipular a imagem em si, mas uma maneira muito melhor é simplesmente adicionar uma UIView que contenha o UIImageView e alterar o plano de fundo para preto. Em seguida, defina o tamanho dessa exibição de contêiner para um pouco maior que o UIImageView.
fonte
Outra maneira é fazer diretamente do designer.
Selecione sua imagem e vá em "Mostrar o inspetor de identidade".
Aqui você pode adicionar manualmente " Atributos de tempo de execução definidos pelo usuário" :
fonte
// você precisa importar
e depois para ImageView na borda
fonte
Esta função retornará sua imagem com borda preta. Tente isso. Espero que isso ajude você.
fonte
No Swift 3, veja como você faz isso na UIImage:
fonte
Para quem procura uma solução plug-and-play na UIImage, escrevi a resposta do CodyMace como uma extensão.
Uso:
let outlined = UIImage(named: "something")?.outline()
fonte
Eu criei uma classe que adiciona uma borda ao imageView h. Use esta classe em vez de UIImageView.Eu dei um preenchimento de 4. Você pode dar conforme seu desejo.
fonte
Eu uso esse método para adicionar uma borda fora da imagem . Você pode personalizar a largura da borda em
boderWidth
constante.Swift 3
fonte