Warum funktioniert drawRect: ohne Aufruf von [superdrawrect: rect]?

9

Ich überschreibe drawRect: in einer meiner Ansichten und es funktioniert auch ohne Aufruf von [superdrawrect: rect]. Wie funktioniert das?

%Vor%     
wakeup 21.10.2014, 05:33
quelle

4 Antworten

20

Aus der Dokumentation:

  

"Die Standardimplementierung dieser Methode tut nichts. Subklassen   die verwenden Technologien wie Core Graphics und UIKit, um ihre zu zeichnen   Der Inhalt der Ansicht sollte diese Methode überschreiben und ihre Zeichnung implementieren   Code dort "

Auch aus der Dokumentation ..

  

"Wenn Sie UIView direkt von der Unterklasse ableiten, verwenden Sie diese Methode   muss nicht super anrufen. Wenn Sie jedoch Unterklassen erstellen, a   verschiedene Sichtklassen, solltest du irgendwann mal super in deinem aufrufen   Implementierung. "

Link zu die Dokumentation

Ich nehme an, deine Superklasse ist UIView. Daher funktioniert es auch, wenn [superdrawrect: rect] nicht aufgerufen wird. Weil das drawRect: weil UIView nichts tut. Es macht also keinen Unterschied, ob Sie [superdreadrect: rect] aufrufen oder nicht.

    
Shanti K 21.10.2014, 05:39
quelle
5

Grundsätzlich funktioniert es, weil die Maschine, die den Grafikkontext für das Zeichnen etc. einrichtet, nicht in der UIView Implementierung von -drawRect: (die leer ist) lebt.

Diese Maschine lebt irgendwo, natürlich, lassen Sie uns in jeder UIView vorgeben, dass es eine interne Methode wie diese gibt - Namen von Methoden, Funktionen und Eigenschaften werden erfunden, um Unschuldige zu schützen:

%Vor%

Dies ist ein sauberer Weg, um die Frameworks aufzubauen, als sich auf einen Subclasser zu verlassen, um das Richtige in einer allgemeinen Überschreibung zu tun, wo ein falsches Verhalten zu einem sehr rätselhaften schlechten Verhalten führen würde. (Und das wäre überhaupt nicht möglich, da die Zeichnung einen Setup- und einen Teardown-Schritt benötigen könnte.)

    
Ben Zotto 21.10.2014 06:23
quelle
-1

Danke. Es gibt keinen Grund, super aufzurufen, weil die Oberklasse hier UIView ist, deren drawRect: nichts tut.

Im Allgemeinen rufen wir setNeedDisplay auf, wenn wir drawRect zum Zeichnen aufrufen möchten.

    
Waseem Ahmad 21.10.2014 05:46
quelle
-1

Ich bin mir sicher, dass Subview nicht funktioniert, wenn [superdrawrect: rect] aufgerufen wird. Wenn Sie die Zeichnung der Superview behalten müssen, müssen Sie [superdrawrect: rect] in der Subview-Datei drawrect: rect hinzufügen, oder Sie werden Ersetzen Sie die Zeichnung.

    
Junyan Wu 25.06.2015 16:19
quelle

Tags und Links