Vous ne devriez appeler setNeedsDisplay que si vous surchargez drawRect dans une sous-classe de UIView, qui est en fait une vue personnalisée dessinant quelque chose à l'écran, comme des lignes, une image ou un rectangle.
Vous devez donc appeler setNeedsDisplay lorsque vous apportez des modifications à quelques variables dont dépend ce dessin et pour que la vue représente ce changement, vous devez appeler cette méthode qui, en interne, donnera un appel à drawRect et redessinera les composants.
Lorsque vous ajoutez une imageView ou un UIButton en tant que sous-vue ou que vous apportez des modifications à une sous-vue, vous ne devez pas appeler cette méthode.
Exemple :
Vous avez une vue qui montre un cercle en mouvement, soit que vous le touchez et le déplacez, ou peut être une animation basée sur un minuteur. Pour cela, vous aurez besoin d'une vue personnalisée qui dessine un cercle à un centre donné et avec un rayon donné. Ceux-ci sont conservés comme variables d'instance qui sont modifiées pour déplacer le cercle en changeant son centre ou le rendre plus grand en augmentant son rayon.
Dans ce cas, vous pouvez soit modifier ces variables (centre ou rayon) dans une boucle et une minuterie, soit utiliser vos doigts dans les méthodes touchesEnded et touchesMoved. Pour refléter le changement dans cette propriété, vous devez redessiner cette vue pour laquelle vous appelez setNeedsDisplay.