Trabalhar com UIImage é um dos fundamentos do desenvolvimento iOS (UIKit). Embora pareça simples — afinal, é “só uma imagem” — existem nuances sobre memória, renderização e fontes de dados que separam um iniciante de um desenvolvedor sênior.
Aqui está o mapa para você dominar essa classe.
🖼️ 1. Como Criar uma UIImage
Existem várias formas de instanciar uma imagem, dependendo de onde ela vem:
- Do Asset Catalog: É a forma mais comum. O sistema gerencia o cache automaticamente.Swift
let logo = UIImage(named: "LogoEmpresa") - De SF Symbols: A biblioteca de ícones nativos da Apple.Swift
let icone = UIImage(systemName: "star.fill") - De Dados (Data): Útil para imagens baixadas da internet.Swift
if let imagem = UIImage(data: dadosDaInternet) { ... } - De um Arquivo: Não utiliza cache, ideal para imagens grandes que você não quer manter na RAM.Swift
let foto = UIImage(contentsOfFile: caminhoDoArquivo)
📺 2. Exibição: O Papel da UIImageView
Lembre-se: UIImage é o dado (o objeto), e UIImageView é a moldura (a visualização). O segredo da aparência está na propriedade contentMode:
| Content Mode | Resultado |
| .scaleAspectFit | Mostra a imagem toda, mantendo a proporção (pode sobrar espaço). |
| .scaleAspectFill | Preenche todo o espaço, cortando as bordas se necessário (o favorito para fotos). |
| .scaleToFill | Estica a imagem para preencher tudo (cuidado: deforma a imagem!). |
[!TIP]
Ao usar
.scaleAspectFill, não esqueça de definirimageView.clipsToBounds = truepara que a imagem não “vaze” para fora da moldura.
🎨 3. Tinting: Mudando a Cor de Ícones
Se você tem um ícone preto e quer que ele fique azul, você não precisa de um novo arquivo. Use o Rendering Mode:
- Defina a imagem como “Template”.
- Mude a
tintColordaUIImageView.
Swift
let imagemSorridente = UIImage(systemName: "face.smiling")?
.withRenderingMode(.alwaysTemplate)
imageView.image = imagemSorridente
imageView.tintColor = .systemBlue
🧠 4. Performance e o “Vampiro de Memória”
Imagens são os maiores consumidores de memória no iOS. Uma foto de 12MP pode ocupar pouco espaço no disco (JPEG), mas quando o UIImage a decodifica para exibir, ela pode ocupar 48MB ou mais na RAM.
- Downsampling: Se você vai exibir uma foto enorme em uma miniatura de 50×50, não carregue a imagem full-res. Use técnicas de redimensionamento antes de atribuir à
UIImageView. - Cache: O
UIImage(named:)é ótimo porque faz cache, mas se você carregar centenas de imagens únicas assim, sua memória vai estourar.
🛠️ 5. UIImage vs. CGImage vs. CIImage
Às vezes, UIImage não é suficiente:
- UIImage: Alto nível, fácil de usar no UIKit.
- CGImage: Baixo nível (Core Graphics). Usado para manipulações pesadas de pixels e filtros manuais.
- CIImage: Para usar com Core Image (filtros de foto, detecção de rostos, etc.).
🚀 Resumo de Boas Práticas
- Use SF Symbols sempre que possível para ícones de interface.
- Use Asset Catalogs para gerenciar versões
@2xe@3xautomaticamente. - Cuidado com a Thread Principal: Se for processar ou baixar uma imagem, faça isso em uma fila de prioridade (Background) e volte para a Main Thread apenas para exibir.
- Como usar o cmdlet Set-PSFLoggingProvider no PowerShell para aprimorar o monitoramento de logs.
- Como personalizar esquemas de cores no prompt de comando do Windows
- Descubra como implementar o altruísmo em um ambiente Windows.
- Como resolver o erro 0x8007f026 STATUS_WININET_LOAD_FAILED no Windows 10 e 11
- Como criar e gerenciar uma conta da Microsoft no Windows
