extremidades backgroundColor colorWithPatternImage se esticou se as alterações de tamanho vista, em vez de repetir?
-
07-07-2019 - |
Pergunta
Eu estou definindo um fundo vista a uma imagem repetindo usando colorWithPatternImage. Se o tamanho da visualização muda depois que eu definir o fundo pela primeira vez, a imagem fica esticada em vez de repetir para o novo tamanho -? Alguma idéia de como posso corrigir isso
Isto é o que eu estou fazendo:
-
definir o fundo da vista em viewDidLoad:
frameView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @ "-frame repeat.png"]];
-
pegar algumas informações a partir do servidor, atualize a vista, alterar o tamanho do quadro da vista para caber o novo conteúdo (geralmente, isso significa fazer o mais alto view)
-
imagem de fundo está agora esticado, mesmo se eu definir o backgroundColor novamente usando o mesmo código exato.
Se eu não fizer o conjunto de fundo inicial, e só defini-lo depois de eu recuperar os dados do servidor e alterar o tamanho vista, isso parece ótimo - repete, e sem alongamento. No entanto, isso significa que nenhum fundo enquanto os dados são loading ... olha feio.
Tem mais alguém correr para isso?
Obrigado por qualquer ajuda!
Solução
A resposta é muito simples, basta ligar
[[self view] setNeedsDisplay];
no controlador quando você alterar o tamanho do quadro (ou onde quer que você faça isso, linha inferior é para enviar uma mensagem setNeedsDisplay à vista após a mudança do quadro). Se isso não funcionar - tente definir a cor de fundo.
E se isso não funciona, implementar sua própria exibição personalizada, e nela substituir o método
- (void) drawRect:(CGRect) rect {
CGRect myBounds = self.bounds;
CGContextRef context = UIGraphicsGetCurrentContext();
[[UIColor colorWithPatternImage:[UIImage imageNamed:@"frame-repeat.png.png"]]set];
CGContextFillRect(context, myBounds);
}
E, em seguida, após o redimensionamento, enviar o setNeedsDisplay à sua vista. Isto irá funcionar para 100%.
Espero que isso foi útil, Pawel