NSControl in NSScrollView

  • NSControl in NSScrollView

    Hallo,

    ich habe ein NSControl-Subclass in ein NSScrollView gepackt. Ich zeichne in dem NSControl-Subclass mehrere Cells. Sehe ich es richtig, dass ich die größe des Controls selbst anpassen muss - je nach dem wie viele cells ich zeichnen möchte?

    Ist es richtig, dass man dies mit setFrameSize:(NSSize) tut, oder gibt es da noch eine bessere Möglichkeit?
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • RE: NSControl in NSScrollView

    Also, der Grundgedanke bei Cells ist, dass sie nur einen "Funktionsblock" liefern, insbesondere Zeichnen und Event-Handling. Cells haben selbst weder Lage noch Größe. Die Anzahl der Cells entspricht auch nicht zwingend der Anzahl der angezeigten Cells. Deshalb bekommen Cells auch ihre gerade notwendige Lage als Parameter.

    Damit kann Control gar nicht automatisch entscheiden, wie groß er aufgrund der Cells sein muss. Stell dir etwa Cells wie Pinsel vor. Du kämst auch nicht auf die Frage, ob man die Leinwand vergrößern muss, wenn man mehr Pinsel hat.

    -setFrameSize:(NSView) setzt die äußere Größe deines Controls. Mit äußerer Größe meine ich hier, dass es die Größe in dem Koordinatensystem des Superviews festlegt. Das dürfte das von dir gewollte sein.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Verstehe ich nicht. Das Control weiß, wie wie oft die Cell mit welchen Parametern gezeichnet werden soll. Das Control weiß, wie groß die cells sind und welcher abstand zwischen den cells ist.

    Konkret: Ich möchte eine Art Schachbrett male. Jedes Quadrat des Schachfeldest lasse ich von der Cell des Controls zeichnen. Immer mit anderen koordinaten.

    Das Control halt eine defaultgröße, die ich im IB eingestellt habe. Das Control ist ein einem NSScrollView. Der benutzer kann die Dimension des Schachbrettes selbst bestimmen. Das Control muss sich doch dann selbst vergrößern - oder?
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • Ok, war schlecht ausgedrückt.

    Eine Cell ist ein Malwerkzeug, kein Malbereich. Deshalb sagst du auch nicht "Liebe Cell, male dich!" wie das bei einem View wäre, sondern "Liebe Cell, mal dorthin!". – Der Bereich wird als Parameter übergeben.

    Natürlich weiß ein Control aus sich selbst heraus, wie groß es ist. Das hat aber erst einmal nichts mit den den Cells und deren Anzahl zu tun. Die Anzahl der Cells hat nichts mit der Größe des Controls zu tun. – Wie die Anzahl der Pinsel nichts mit der Größe der Leinwand zu tun hat.

    In deinem Falle ist es etwa nahe liegend, nur 2 Cells zu haben: eine für schwarze Felder und eine für weiße Felder. Dennoch hättest du die Control-Größe 8 x 8 x CellGröße.

    Du *kannst* für jeden Bereich (also Feld) genau eine Cell haben. Das ist aber alles andere als zwingend. Nahe liegend ist es indessen, wenn die Cell slebst Daten hält.

    Darauf wollte ich bezüglich des Teiles "wie groß die Cells sind" hinweisen, weil Cells eben keine Größe haben.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?