Percebi que quando coloco um branco ou preto UIImage
em uma UISegmentedControl
cor, ela automaticamente a mascara para corresponder à tonalidade do controle segmentado. Eu pensei que isso era muito legal, e queria saber se eu poderia fazer isso em outro lugar também. Por exemplo, eu tenho vários botões que têm uma forma uniforme, mas cores variadas. Em vez de criar um PNG para cada botão, eu poderia, de alguma forma, usar essa máscara de cores para usar a mesma imagem em todos eles, mas depois definir uma cor de tonalidade ou algo para alterar a cor real?
294
Respostas:
No iOS 7, existe um novo método
UIImage
para especificar o modo de renderização. O uso do modo de renderizaçãoUIImageRenderingModeAlwaysTemplate
permitirá que a cor da imagem seja controlada pela cor da tonalidade do botão.Objetivo-C
Rápido
fonte
tintColor
estiver muito escuro, verifique seadjustsImageWhenHighlighted
NÃO. (Ou em IB: "Destaque ajusta a imagem" está desmarcada.)Como Ric já mencionou em seu post, você pode definir o modo de renderização no código, também pode fazer isso diretamente no catálogo de imagens, veja a imagem anexada abaixo. Basta definir o
Render As
queTemplate Image
Advertência Eu tive problemas com o iOS 7 e essa abordagem. Portanto, se você também usa o iOS 7, pode fazê-lo em código, para ter certeza, conforme descrito aqui .
fonte
Os botões personalizados aparecem em suas respectivas cores de imagem. Definir o tipo de botão como "Sistema" no storyboard (ou
UIButtonTypeSystem
no código) renderizará a imagem do botão com a cor padrão da tonalidade.(testado no iOS9, Xcode 7.3)
fonte
Você deve definir o modo de renderização da imagem
UIImageRenderingModeAlwaysTemplate
paratintColor
afetar a UIImage. Aqui está a solução no Swift:SWIFT 4x
fonte
Se você tiver um botão personalizado com uma imagem de plano de fundo. Você pode definir a cor da tonalidade do seu botão e substituir a imagem pelas seguintes.
Nos ativos, selecione o plano de fundo do botão que você deseja definir na cor da tonalidade.
No inspetor de atributos da imagem, defina o valor renderizado como "Imagem do modelo"
Agora, sempre que você definir
button.tintColor = UIColor.red
o botão, será exibido em vermelho.fonte
No Swift, você pode fazer o seguinte:
Então, na sua viewDidLoad
E para modificar a cor
EDIT Xcode 8 Agora você também pode apenas o modo de renderização da imagem em seus .xcassets para Template Image e, em seguida, não precisa declará-la especificamente
var exampleImage
maisfonte
Não sabe exatamente o que deseja, mas esse método de categoria mascara uma UIImage com uma cor especificada, para que você possa ter uma única imagem e alterá-la para o que quiser.
ImageUtils.h
ImageUtils.m
Importe a categoria ImageUtils e faça algo assim ...
fonte
kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedLast
onCGBitmapContextCreate
UIDevice
classe:CGFloat scale = [UIScreen mainScreen].scale; CGFloat width = self.size.width * scale; CGFloat height = self.size.height * scale;
Ascale
propriedade existe no iOS 4.0.scale
valor quando eleUIImage
é criado:UIImage *coloredImage = [UIImage imageWithCGImage:cImage scale:scale orientation:self.imageOrientation];
Swift 4 com customType:
fonte
Para Xamarin.iOS (C #):
fonte
Swift 3 :
Essa solução pode ser confortável se você já configurou sua imagem através do construtor de interface xCode. Basicamente, você tem uma extensão para colorir uma imagem:
Em seguida, você pode preparar esta extensão UIButton para colorir a imagem para um estado específico:
Uso:
PS (funcionando bem também nas células da tabela, você não precisa chamar o
setNeedDisplay()
método, a alteração da cor é imediata devido à extensão UIImage .fonte
Se você deseja mascarar manualmente sua imagem, aqui está um código atualizado que funciona com telas retina
fonte
Você deveria tentar
Depois de definir o quadro
fonte
Swift 3.0
fonte
Alterar a imagem do botão ou a cor da tonalidade da visualização da imagem Swift:
fonte
Nenhuma das opções acima funcionou para mim, porque a tonalidade foi limpa após o clique. Eu tive que usar
fonte