Solo debe llamar a setNeedsDisplay si anula drawRect en una subclase de UIView que es básicamente una vista personalizada que dibuja algo en la pantalla, como líneas, imágenes o formas como un rectángulo.
Por lo tanto, debe llamar a setNeedsDisplay cuando realice cambios en algunas variables de las que depende este dibujo y para ver ese cambio, debe llamar a este método que internamente llamará a drawRect y redibujará los componentes.
Cuando agrega un imageView o un UIButton como una subvista o realiza cambios en cualquier subvista, no necesita llamar a este método.
Ejemplo:
Se tiene una vista que muestra un círculo en movimiento, ya sea que se toca y mueve, o puede ser animación basada en temporizador. Ahora para esto, necesitará una vista personalizada que dibuje un círculo en un centro dado y con un radio dado. Se guardan como variables de instancia que se modifican para mover el círculo cambiando su centro o hacerlo más grande al aumentar su radio.
Ahora, en este caso, o bien va a modificar estas variables (centro o radio) en un bucle y temporizador O puede ser con los dedos en los métodos toques Enchanted y toquesMoved. Para reflejar el cambio en esta propiedad, necesita volver a dibujar esta vista a la que llamará setNeedsDisplay.
¿Lo mismo para después de cambiar el marco de una capa o ver dentro de mi subclase de vista? –