Frage

Ich mag gelegentlich programmaticaly ein NSView Dimensionen ändern. Um dies zu tun, ist es hilfreich, die Dimensionen der verschiedenen Ansichten zu bekommen, stellen Sie sie in Bezug zueinander, und dann SetFrame zu benutzen. Neu zu positionieren

Das Problem ist, dass der Rahmen Methode NSRects in der Regel zurück, die eindeutig falsch sind, aus meiner Sicht.

Ich habe ein Programm mit einem NSPanel im Interface Builder einrichten und verschiedenen Verbindungen zu meinem Hauptprogramm. Um die NSRects Frame zurück zu testen, öffnete ich das Panel in meiner Anwendung awakeFromNib: Methode abgerufen einige NSRects und druckte sie auf die Konsole

.

Hier ist mein awakeFromNib:

- (void)awakeFromNib {
  NSLog(@"in awakeFromNib");
  [self showPrefsSheet:self]; //this is the prefs sheet with the controls of interest
                              //note that it does indeed pop up and is displayed
  originalFrame = [aTextView frame];
  NSLog(@"the frame is %d, %d, %d, %d", originalFrame.origin.x, originalFrame.origin.y, originalFrame.size.width, originalFrame.size.height);
  originalFrame = [aButton frame];
  NSLog(@"the frame is %d, %d, %d, %d", originalFrame.origin.x, originalFrame.origin.y, originalFrame.size.width, originalFrame.size.height);
  return;
  }

Die Ergebnisse dieses Code aussehen wie diese in der Konsole:

in awakeFromNib
the frame is 0, 0, 0, 0
the frame is 0, 1079230464, 0, 1078329344

Beachten Sie, dass (i) die Platte und die beiden Kontrollen werden auf dem Bildschirm angezeigt wird; (Ii) Ich weiß für eine Tatsache, dass die Ausgänge richtig angeschlossen sind, weil ich programmatisch Dinge zu den Kontrollen tun und sie arbeiten; (Iii) Interface Builder zeigt korrekte Rahmengrößen im Inspektor unter "Größe und Position".

Kurz gesagt, alles andere über das Programm funktioniert perfekt. Es scheint tatsächlich, dass die Rahmenabmessungen nicht richtig oder etwas gesetzt.

Kann mir jemand sagen, wie die echten Bildinformationen abzurufen? Oder zumindest erklären die Ergebnisse, die ich zu sehen bin?

War es hilfreich?

Lösung

Die Rahmenkoordinaten sind Schwimmer, aber der Logdaten verwenden% d. (Ints).

die NSLog Zeichenfolge ändern:

@"the frame is %f, %f, %f, %f"

Editiert:

Hier ist ein sehr nützliches Makro ich benutze, wenn Rects Debuggen:

#define RECTLOG(rect)    (NSLog(@""  #rect @" x:%f y:%f w:%f h:%f", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height ));

Sie können dann tun einfach rect Protokolle:

RECTLOG([aTextView frame]);

Andere Tipps

Wenn Sie eine NSRect Anmeldung, denken Sie daran, dass die Felder Punktwerte schweben, nicht ganze Zahlen sind.

Anstatt das Format zu schreiben Planer selbst (entweder inline oder über einen Makro), verwenden Sie die Funktionen, die der Rahmen für Sie sehen vor:

NSLog(@"frame - %@", NSStringFromRect([view frame]));

Siehe auch:

NSStringFromSize
NSStringFromPoint
NSStringFromRange

etc

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top