2009-08-20 7 views
4

J'ai une sous-classe UIView dans laquelle je fais un dessin personnalisé. Lorsque drawRect:(CGRect)rect est appelé rect.size est soit (64, 63) ou (63, 64); self.frame.size est (64, 64).Conditions dans lesquelles drawRect's rect! = Self.frame

J'ai plusieurs instances de cette sous-classe, dont la plupart obtiennent la taille attendue (64, 64) pour le paramètre drawRect.

Quelles sont les conditions qui peuvent amener certaines de ces sous-classes à avoir des limites drawRect modifiées, mais pas d'autres?

supplémentaires: petits morceaux

  • self.opaque est NO
  • self.transform ne varie; Je l'utilise pour faire tourner la UIView par incréments de 90 degrés, mais la rotation de la vue ne change pas rect.size sur les appels subesquent à drawRect

Répondre

12

Le rect passé à drawRect est le rect que le système vous demande de dessiner (dirtyRect) dans le système de coordonnées de votre vue.

Il peut s'agir de self.bounds ou d'un rect différent.

Généralement, vous devez simplement ignorer le paramètre et dessiner vous-même dans self.bounds, sauf si votre dessin est très complexe. Prêter attention au paramètre dirtyRect transmis est une optimisation qui doit être ignorée jusqu'à ce que vous avez profilé votre application et déterminé qu'il s'agit d'un point chaud.