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

War es hilfreich?

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.

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