Existe um carregador de nove patch para o iPhone?
-
16-09-2019 - |
Pergunta
Android tem uma boa maneira de definir imagens stretchable chamado de nove patch. Consulte estes docs para uma descrição do conceito . A idéia é cercar uma imagem PNG com uma borda de 1 pixel, onde pode definir as áreas elásticos e as dimensões de preenchimento da imagem. Isto é absolutamente brilhante e eu gostaria de usar a idéia em meu iPhone app. Antes de escrever minha própria nove patch para carregador UIImage eu pensei em ver se já existe. O Google não encontrou nenhum resultado então eu não tenho muita esperança, mas não ferir a perguntar, certo? : -)
EDIT: Gente, eu aprecio as respostas, mas eu sei sobre stretchableImageWithLeftCapWidth...
. Eu estou olhando para o código que leva um @"foo.9.png"
caminho e retorna um UIImage
elástica. Este código irá, sem dúvida, usar stretchableImageWithLeftCapWidth...
internamente. Eu tenho certeza que eu poderia escrever o código de mim mesmo usando esse método. Mas eu estou perguntando se alguém já tenha feito isso.
Solução
Eu recebi um e-mail de software Tortuga22 que me informou que eles criaram uma biblioteca e liberado sob a licença Apache:
Anúncio: http://blog.tortuga22.com / 2010/05/31 / anunciando-tortuga-22-ninepatch /
O código fonte: http://github.com/tortuga22/Tortuga22-NinePatch
Exemplo de utilização:
// loads-and-caches ninepatch and rendered image of requested size
UIImage buttonImg = [TUNinePatchCache imageOfSize:buttonSize
forNinePatchNamed:@"buttonNormalBackground"];
[self.buttonNeedingBackground setImage:buttonImg
forControlState:UIControlStateNormal];
Outras dicas
Também olhar para propriedade contentStretch de UIView. É mais robusto e bem-comportado do que stretchableImageWithLeftCapWidth. Basicamente, ele funciona apenas por definir o retângulo elástica dentro de sua imagem e criar automaticamente uma escalado nove patch. Esse retângulo interno pode ser qualquer coisa - ele mesmo não tem que estar no centro da imagem. Além disso, ao contrário stretchableImage este método vai encolher corretamente gráficos e se comportam como esperado para gráficos com iluminação ou brilho. Eu não posso pensar de qualquer aplicação no mundo real onde você iria querer mais do que isso.
Sim UIImage
suporta algo parecido. Veja
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight
e a documentação para leftCapWidth e topCapHeight
basicamente a imagem não é esticada na área leftCapWidth pixels a partir da borda esquerda e direita e topCapHeight pixels a partir do topo e no fundo. Quando a imagem é dimensionada dentro desses limites área está sujeita ao alongamento.
Todas as imagens UIImage
apoiar esta nativamente. Por padrão, as imagens inteiras é extensível, mas você pode definir limites com as propriedades leftCapWidth
e topCapHeight
ou você pode gerar um de um UIImage
existente com o método - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight
.
Note que, na execução de maçã, quando você definir um ou ambos destes valores, a área elástica é forçado a ser um único pixel de alta / largura.