CGRect Positionierung entsprechend Mittelpunkt
Ich versuche, erstellen Sie mehrere Ansichten für eine iPad-app. Zuerst erstellte ich ein Menü anzeigen und dann ein sub-Menü anzeigen, mit Koordinaten laut Menü. Also es sieht wie folgt aus:
Was ich getan habe:
self.view = [[UIView alloc] initWithFrame:CGRectMake(self.parentViewController.view.frame.size.width, 0, 150, screenHeight)];
Aber jetzt auf sub-Menü, die ich versuche zu schaffen, die Inhalte-Ansicht, die einen UINavigationController. Sie versuchen, das gleiche zu tun, bekomme ich dieses Ergebnis:
Was ich Tue (dieses mal den Rahmen zu schaffen, die auf sub-menu-view-controller):
CGRect frame = CGRectMake(self.view.frame.origin.x + self.view.frame.size.width,
0,
[[UIScreen mainScreen] bounds].size.width - self.view.frame.origin.x - self.view.frame.size.width,
[[UIScreen mainScreen] bounds].size.height);
Es ist ziemlich selbsterklärend, aber ich bekomme nur die sub-Menü-Ursprung und fügen Sie deren Breite, so bekomme ich den rechten Rand zu koordinieren.
Nach vielen versuchen habe ich es geschafft, es funktioniert, weil ich bemerkte, dass die CGRectMake ist mit der Mitte des UINavigationController Blick auf dessen position. Also der folgende code:
CGRect frame = CGRectMake(self.view.frame.origin.x + self.view.frame.size.width + 259,
0,
[[UIScreen mainScreen] bounds].size.width - self.view.frame.origin.x - self.view.frame.size.width,
[[UIScreen mainScreen] bounds].size.height);
Ergibt die richtige position.
Was ist Los? Ich dachte CGRectMake Herkunft immer oben Links, aber diese besonders-Ansicht ist tatsächlich oben in der Mitte (oder in der Mitte-Mitte nicht sicher.) Was mache ich falsch?
EDIT1:
Hier ist die Ausgabe der Konsole für den Rahmen mit rechts position:
Beachten Sie, wie die nav-Leiste ist nun richtig positioniert:
Aber die x-coord ist nicht 250 (wie es sein sollte, weil-Menü.Breite + sub-Menü.Breite = 250.)
EDIT2:
Ich schließlich aufgegeben. Das problem mit dem automatisch generierten UINavigationBar, die erstellt wird, von der UINavigationViewController. Ich kann nicht scheinen, um herauszufinden, wie es zu konfigurieren. Ich bin gonna lassen die Frage offen, falls jemand die Antwort kennt.
Dieses kann dir helfen : stackoverflow.com/questions/6784823/...
stackoverflow.com/questions/11251988/...
Gut, Sie haben zu verstehen, was die
frame
, was ist die view-Hierarchie (frame
ist relativ zur oberen linken Ecke des superview) und wahrscheinlich auch autoresizing Masken. CGRect
ist nur eine Gruppe von vier zahlen, sonst nichts. Die wichtige Sache ist, wie es ist, interpretiert das layout der view-Mechanismus.gut, dass die navigation bar wird angelegt 'automatisch', ich alloc ' D und initiiert eine leere Ansicht mit Rahmen. Das ist, warum? Sollte ich eine Ansicht erstellen, die nur richtig richten Sie die nav bar?
InformationsquelleAutor dccarmo | 2013-08-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zentrum einer
CGRect
ist einCGPoint
erstellt von derorigin.x + ( size.width /2 )
undorigin.y + ( size.height /2 )
.CGRectGetMidX
undCGRectGetMidY
definiert in CGGeometry.hDies ist nicht genau das, was ich verlange, denke ich.
Aber es gibt Ihnen, was Sie brauchen. @abizern schön. Ich wusste, dass die NS lieben. Wusste nicht, dass der CG entspricht.
Wenn möglich, sollten Sie erwägen, Auto-Layout, wie es machen wird das wirklich einfach.
InformationsquelleAutor uchuugaka
Damit wird die Taste in der Mitte, egal, was das Gerät ist
InformationsquelleAutor Youstanzr
CGRectMake erzeugt nur eine Stuktur von (x,y, witdh, height).
Sie Ihren Teil zum festlegen der richtigen Werte.
zunächst hilft es, nicht für inline-debugging. erstellen Sie 4 lokale Variablen x,y,w,h und einen Wert zuweisen, erstellen Sie dann die CGRect. 2) deine x-coord sieht seltsam aus x + Breite außerhalb der Ansicht. die x der Untersichten Rahmen muss zwischen Rahmen.x und Rahmen.x + Breite.
Aber nicht die Rahmen.x > xcoord > Rahmen.x + width-geben Sie mir einen Rahmen in der sub-Menü?
Bearbeitet die Frage mit mehr info
InformationsquelleAutor AlexWien