Como podemos tornar essas imagens mais arredondadas?
Umair Afzal
Por que não podemos simplesmente voltar image? Por que precisa fazer isso? self.init(cgImage: cgImage)
precisa saber é o seguinte
@AndreyGagan AFAIK, você não pode "substituir" o eu pelo recém-criado UIImageem um construtor, mas pode encadear através do UIImage.init(cgImage: )construtor.
Alnitak
2
A imagem não é criada com a escala adequada. Por exemplo, quando o tamanho é 1x1, uma imagem 2x2 é retornada quando a escala da tela principal é 2,0. Você deve ligarself.init(cgImage: cgImage, scale: image!.scale, orientation: image!.imageOrientation)
Marián Černý
92
Aqui está outra opção. Eu acredito que você queria um objeto UIImage exato.
Este , provavelmente, atinge o efeito que a OP queria, mas vale a pena nada que eles tinham um método para criar um UIImage, não para definir um UIImageView.
ttarik
Seu segundo método ainda cria uma visualização de imagem, não uma imagem, que é o que @ ev0lution estava apontando.
Rdelmar # 24/14
editar 3 anexado. Agora temos várias maneiras. Final com um UIImageView.
9788 Steve Rosenberg #
1
O método getImageWithColor(color: UIColor, size: CGSize) -> UIImageé o suficiente como a resposta, como eu acho que nem todo mundo vai usar isso em conjunto com um UIImageView
Henry Pham
Como podemos tornar essas imagens mais arredondadas?
Umair Afzal
9
Um pequeno ajuste na excelente resposta de @ neoneye, permitindo que o código de chamada não precise criar o CGSize e alterou o nome para não colidir com muitos outros:
Eu acho que algumas respostas aqui são um pouco enganadoras. Na maioria das vezes, você precisará especificar o tamanho da imagem, não um caso específico (como 1x1). Mas esta é uma boa abordagem.
UIImage
não possui um-initWithSize:andColor:
método, masNSImage
possui no OS X. Você está usando uma biblioteca ou categoria personalizada para isso?Respostas:
Outra solução interessante, compatível com Swift 2.2 , é criar outro construtor no UIImage, desta maneira:
Dessa maneira, você pode criar a imagem colorida personalizada da seguinte maneira:
Ou, opcionalmente, crie a imagem com um tamanho personalizado:
Swift 3.0
fonte
UIGraphicsBeginImageContextWithOptions(rect.size, true, 1.0)
ref: developer.apple.com/library/ios/documentation/UIKit/Reference/…image
? Por que precisa fazer isso?self.init(cgImage: cgImage)
UIImage
em um construtor, mas pode encadear através doUIImage.init(cgImage: )
construtor.self.init(cgImage: cgImage, scale: image!.scale, orientation: image!.imageOrientation)
Aqui está outra opção. Eu acredito que você queria um objeto UIImage exato.
Coloque isso no seu código Swift e chame-o
Swift 3.1:
fonte
UIRectMake(0, 0, size.width, size.height)
, este parece ser o correto:CGRectMake(0, 0, size.width, size.height)
.let
vez devar
para variáveis imutáveis; aqui parece querect
nemimage
deveria estar usandovar
declaração.Versão Swift 4:
Uso:
fonte
Uma abordagem mais limpa seria encapsular a lógica dentro de uma
UIImage
extensão:Agora o consumidor pode ligar
UIImage.imageWithColor(UIColor.blackColor())
para criar uma imagem com fundo preto.fonte
Método semelhante, se você quiser desenhar a imagem, em vez de conectar uma via IBOutlet.
Terceiro método emprestado de anthonyliao. Um pouco mais complicado:
fonte
UIImage
, não para definir umUIImageView
.getImageWithColor(color: UIColor, size: CGSize) -> UIImage
é o suficiente como a resposta, como eu acho que nem todo mundo vai usar isso em conjunto com um UIImageViewUm pequeno ajuste na excelente resposta de @ neoneye, permitindo que o código de chamada não precise criar o CGSize e alterou o nome para não colidir com muitos outros:
Swift 4
fonte
Você pode usar a nova API do iOS 10 UIGraphicsImageRenderer .
Aqui está uma extensão no UIColor no Swift 3.1
fonte
Uma boa maneira é ter uma propriedade computada como esta:
Uso:
fonte
Versão Swift 3 de @anthonyliao Resposta aceita:
fonte
Reto com cantos arredondados
}
fonte