Nach der rotation UIView-Koordinaten vertauscht werden, aber UIWindow nicht?

Mithilfe von Xcode 4.2.1 iPad iOS 5.0.1 erstellen Sie eine neue "Single View" iPad-Projekt. Im controller hinzufügen:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}

- (void) dumpView: (UIView *) view {
    CGRect frame = view.frame ;
    CGRect bounds = view.bounds ;
    CGPoint center = view.center ;

    NSLog(@"view [%@]:%d frame=%@ bounds=%@ center=%@"
          ,   NSStringFromClass(view.class)
          ,   [view hash]
          ,   NSStringFromCGRect(frame)
          ,   NSStringFromCGRect(bounds)
          ,   NSStringFromCGPoint(center)) ;
}

- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation) fromInterfaceOrientation {

    NSLog(@"INViewController.didRotateFromInterfaceOrientation: %d to %d", fromInterfaceOrientation, self.interfaceOrientation) ;
    [self dumpView: self.view] ;
    [self dumpView: self.view.superview] ;
}

Führen Sie es, drehen Sie das Gerät und Sie erhalten:

INViewController.didRotateFromInterfaceOrientation: 2 to 4
view [UIView]   bounds={{0, 0}, {1024, 748}} center={394, 512}
view [UIWindow] bounds={{0, 0}, {768, 1024}} center={384, 512}

In anderen Worten, die UIView hat seine Koordinaten "ausgelagert Landschaft" als erwartet, aber seine Eltern UIWindow noch Forderungen werden im portrait-Modus...

Auch, die UIView Größe scheint ein bisschen falsch: die y-Koordinate, die sollten in 20 bei 0 ...

Jemand weiß, was das bedeutet?

InformationsquelleAutor verec | 2011-12-22
Schreibe einen Kommentar