Tengo una UIView que contiene una fila de subclases de UIView. La subclase ha anulado la drawRect: y ha establecido contentMode = UIViewContentModeRedraw.

A medida que el usuario calabazas y se extiende el contenedor principal de la child views de squash y de estiramiento. Como el cambio de forma se produce me gustaría tener drawRect llamado repetidamente para cambiar el contenido de la child views. Hasta ahora han sido infructuosos. ¿Cuál es la manera correcta de hacerlo?

Saludos,

Doug

InformationsquelleAutor dugla | 2009-09-17

3 Comentarios

  1. 59

    En el Cacao, que rara vez (si alguna vez) llamada drawRect – que acaba de marca de la región o de la vista como la necesidad de actualización, y serán programados para volver a dibujar. Esto permite que vuelve a dibujar para múltiples invalidaciones funcionen a la vez.

    Para Cocoa Touch, que quieres que [ver setNeedsDisplay], o setNeedsDisplayinRect:(CGRect)

    • He intentado hacer exactamente eso. Ningún efecto. Nuthin. En la subclase me hicieron caso omiso de los setTransform: método de esta manera: – (void)setTransform:(CGAffineTransform)newValue { [super setTransform:newValue]; [self setNeedsDisplay]; }
    • Al parecer, yo bits de código perdiendo el tiempo ahora ha setNeedsDisplay disparar correctamente.
  2. 3

    Usted necesita llamar a [ver setNeedsLayout], esto hará que el subvistas para recibir un drawRect: llame si los cambios de diseño. Yo no he probado esto, sin embargo.

    • Algunos dicen setNeedsDisplay, algunos dicen setNeedsLayout .. ¿cuáles son las diferentes implicaciones de aquí?
  3. 0

    Esta solución es un poco loco, pero tiene un sentido lógico, y tiene un gran efecto visual. Estoy trabajando con un NSLayoutManager y un par de NSTextContainers, la colocación del texto en dos columnas. Porque yo estoy usando varios contenedores de texto (y no estoy seguro de lo que quiero múltiples UITextView), estoy anulando la draw(rect: CGRect) método de MyDrawingView: UIView.

    El problema es que el uso de self.contentMode = .redraw aún los resultados en menores de estiramiento en rotación-lo suficientemente significativo para ser un rompe el acuerdo.

    Me di cuenta de que la configuración de contentMode = .left, o incluso contentMode = .scaleAspectFit estaba cerca de lo que yo quería, en términos de píxel perfecta rotación. Pero obviamente, yo no estaba recibiendo la llamada de dibujo que yo necesitaba.

    –Que se me pasó por encima layoutSubviews(), cambió el contentMode a .scaleAspectFit, llamado super.layoutSubviews(), y luego cambió de nuevo. 😛

    override func layoutSubviews() {
        self.contentMode = .scaleAspectFit
    
        super.layoutSubviews()
        self.contentMode = .redraw
    }

    Es…perfecto.

Dejar respuesta

Please enter your comment!
Please enter your name here