extremidades backgroundColor colorWithPatternImage se esticou se as alterações de tamanho vista, em vez de repetir?

StackOverflow https://stackoverflow.com/questions/1418735

  •  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!

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top