Mein UIViewController ist „liegend“ um seine Mittel Eigentum
-
21-08-2019 - |
Frage
Ich frage meine Viewcontroller für sie view.center Eigenschaft ist und eine neue UIView Zeichnung, die sich dreht sich um dieses „Zentrum“ ... Ich bin immer (160, 250) als Antwort. aber wenn die neue UIView zieht es unten Zentrum ... Also ich frage mich, wer gibt mir diese Informationen und was es betrifft? Dies ist eindeutig, wo die Mitte der Ansicht in Bezug auf das Fenster, wenn Sie die 20px Höhe der Statusleiste berücksichtigen. was würde drücken Sie die Mitte der Ansicht nach unten 10px. aber wenn myView Zeichnung scheint es in Bezug auf die ViewController.view und nicht das Fenster zu ziehen, so dass es unterhalb der Mitte 20px erscheint ...
würde ich die Viewcontroller erwarten, dass ich seine Mitte geben (160, 230), so konnte ich in der Mitte ziehen ... muss ich manuell für die Statusleiste-Konto und 20 von der Höhe jedes Mal subtrahieren? oder gibt es eine Ansicht Raum Übersetzung i mit Blick auf bin? Von ViewController.m:
- (void)setUpMyView {
// Create my view
MyView *aView = [[MyView alloc] init];
self.myView = aView;
[aView release];
myView.center = self.view.center;
NSLog(@"CenterX: %f, Y: %f", self.view.center.x, self.view.center.y);
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI_2);
myView.transform = transform;
[self.view addSubview:myView];
}
Konsole: CenterX: 160.000000, Y: 250.000000
Lösung
Es ist nicht „liegend“ Eigentlich ist es Ihnen eine Antwort in einem anderen Koordinatensystem zu geben.
Wenn Sie eine Ansicht des Zentrums und festlegen, es wird berechnet in Bezug auf seine Eltern 's Koordinatensystem . self.view
der Eltern ist das Fenster der Anwendung, daher der Mitte ist (160, 250), wie Sie vermutet. Aber myView
die Eltern sind self.view
, die ihr eigenes lokales Koordinatensystem hat. In diesem Fall wird das Koordinatensystem 20 Pixel geringer ist als die des Fensters.
Was Sie wollen, ist das Zentrum von self.myView
in seinem eigenen Koordinatensystem zu finden. Es gibt zwei Möglichkeiten, wie Sie es tun könnten.
1) Man könnte es auf der Grundlage der bounds
Eigenschaft berechnen, was einen CGRect
ist, die die Grenzen einer Ansicht in einem eigenen Koordinatensystem angibt:
myView.center = CGPointMake(self.view.bounds.size.width / 2, self.view.bounds.size.height / 2);
2) Oder Sie könnten UIView
des convertPoint:fromView:
Methode zur Umwandlung der Koordinate aus dem Koordinatensystem des Fensters in die von self.view
verwenden:
// Pass nil as the source view to convert from the window's coordinate system myView.center = [self.view convertPoint:self.view.center fromView:nil];
Andere Tipps
Vielleicht liegt es an den Subview hinzufügen, bevor Sie seine Mitte und Größe zu fragen.
MyView *aView = [[MyView alloc] init];
self.myView = aView;
[aView release];
[self.view addSubview:myView]; // add it to the subview first before asking center.
myView.center = self.view.center;
NSLog(@"CenterX: %f, Y: %f", self.view.center.x, self.view.center.y);
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI_2);
myView.transform = transform;
Ich glaube, ich kenne die Antwort. Sie anzeigen Zentrum korrekt ist!
Sie haben vergessen, die iPhone-Statusleiste ist 20px nach unten vom oberen Rand des Bildschirms hinzuzufügen und damit aus Ihrer Sicht Zentrum enthalten. Bingo.