Korzystanie z Xcode 4.2.1 iPad iOS 5.0.1, utwórz nowy projekt iPada "Pojedynczy widok". W sterowniku, dodać:Po obrocie współrzędne UIView są zamieniane, ale UIWindow nie są?
- (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] ;
}
go uruchomić, należy obrócić urządzenie, a otrzymasz:
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}
Innymi słowy, UIView ma swoje współrzędne „zamienione na poziomą” zgodnie z oczekiwaniami, ale jego rodzic UIWindow nadal twierdzi, że jest w trybie portretowym ...
również wielkość UIView wydaje się być nieco źle: współrzędna y, które powinny być na 20 jest w stanie 0 ...
Każdy wie WH w ten sposób?
To ma sens. Dziękuję Ci. Nawiasem mówiąc, dziękuję ci również za pokazanie mi, że gdb może być faktycznie użyty interaktywnie :-) – verec
@rob Poza tym, że dokumenty ref dla UIView.frame mówią: Warning Jeśli właściwość transform nie jest transformacją tożsamości, wartość tej właściwości jest niezdefiniowana dlatego należy go zignorować. Czy mógłbyś to rozwinąć? Załóżmy, że chcę animować ramkę obróconego widoku, aby przesuwać ją jako nakładkę. – tribalvibes
Nie polegam na 'frame' w moim kodzie, gdy' transform' nie jest tożsamością. Jednak metoda 'frame' zawsze zwraca' [self convertRect: self.bounds toView: self.superview] 'i dlatego jest przydatna podczas debugowania. –