Pergunta

Eu tenho uma visão que contém uma fila de subclasses de UIView. A subclasse substituiu drawRect: e definiu contentMode = UIViewContentModeRedraw.

À medida que o usuário esmaga e estica o contêiner pai, o child views Squash e estique. À medida que a mudança de forma ocorre, eu gostaria de ter drawRect chamado repetidamente para mudar o conteúdo do child views. Até agora, não tenho êxito. Qual é a maneira correta de fazer isso?

Saúde,

Doug

Foi útil?

Solução

No cacau, você raramente (se é que alguma vez) chama de Drawrect - basta marcar a região ou ver como precisar de atualização e ela será agendada para redesenhar. Isso permite que as redesenhas para que várias invalidações sejam recolhidas.

Para o toque de cacau, você quer Veja SetNeedsDisplay, ou SETNEEDSDISPLAYINRECT: (CGRECT)

Outras dicas

Você precisa ligar para o [View SetNeedsLayout], isso deve fazer com que as subviews recebam um drawrect: ligue se o layout for alterado. Eu não testei isso, no entanto.

Esta solução é um pouco louca, mas faz sentido lógico e tem um ótimo resultado visual. Estou trabalhando com um NSLayoutManager e um casal NSTextContainerS, colocando texto em duas colunas. Porque estou usando vários contêineres de texto (e não tenho certeza se quero vários UITextView), Estou substituindo o draw(rect: CGRect) método de MyDrawingView: UIView.

O problema é que usar self.contentMode = .redraw Ainda resulta em um pequeno alongamento na rotação-significativo o suficiente para ser um desperdício.

Eu notei aquela configuração contentMode = .left, ou mesmo contentMode = .scaleAspectFit estava próximo do que eu queria, em termos de rotação perfeita de pixels. Mas, obviamente, eu não estava recebendo a ligação que eu precisava.

Então-eu substitui layoutSubviews(), mudou o contentMode para .scaleAspectFit, chamado super.layoutSubviews(), e depois trocou de volta. : P

override func layoutSubviews() {
    self.contentMode = .scaleAspectFit

    super.layoutSubviews()
    self.contentMode = .redraw
}

É perfeito.

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