2010-03-31 16 views
6

Mam aplikację z wieloma widokami. Chcę, aby tylko kilka widoków mogło obracać się w krajobraz po obróceniu urządzenia. Dowiedziałem się, że nie mogę użyć (BOOL)shouldAutorotateToInterfaceOrientation, ponieważ spowoduje to obrót każdego widoku w mojej aplikacji. Znalazłem rozwiązanie tego problemu tutaj w Stack Overflow, ale teraz mam inny problem do czynienia.Zmiana rozmiaru widoku na telefonie iPhone podczas obracania

Widok obraca się, gdy obracam urządzenie, ale nadal pokazuje widok tak, jakby był nadal w trybie portretu (prosto w górę iw dół). Górna i dolna część widoku jest obcięta. Czy istnieje sposób na obrócenie widoku i dostosowanie jego rozmiaru do nowej orientacji? Znalazłem także this, ale nie udało mi się go uruchomić.

Oto mój kod dla tego widoku:

@implementation businessBank 
@synthesize webView, activityIndicator; 


- (void)viewDidLoad { 

    [super viewDidLoad]; 
    NSString *urlAddress = @"website_url"; 

    NSURL *url = [NSURL URLWithString:urlAddress]; 
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 

    [webView loadRequest:requestObj]; 
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(didRotate:) 
               name:UIDeviceOrientationDidChangeNotification 
               object:nil]; 

} 
- (void)didRotate:(NSNotification *)notification { 

    UIDeviceOrientation orientation = [[notification object] orientation]; 

    if (orientation == UIDeviceOrientationLandscapeLeft) { 
     [self.view setTransform:CGAffineTransformMakeRotation(M_PI/2.0)]; 
    } else if (orientation == UIDeviceOrientationLandscapeRight) { 
     [self.view setTransform:CGAffineTransformMakeRotation(M_PI/-2.0)]; 
    } else if (orientation == UIDeviceOrientationPortraitUpsideDown) { 
     [self.view setTransform:CGAffineTransformMakeRotation(M_PI)]; 
    } else if (orientation == UIDeviceOrientationPortrait) { 
     [self.view setTransform:CGAffineTransformMakeRotation(0.0)]; 
    } 
} 

Odpowiedz

3

Chyba że masz bardzo podstawową aplikację, która rozciąga się dopasować orientację, automatyczne skalowanie nie będzie działać dobrze dla ciebie tak czy inaczej - naprawdę trzeba tworzyć dwa osobne widoki dla dwóch orientacji.

Aby uzyskać pomoc na temat automatycznej zmiany poglądów, można sprawdzić ten tutorial:

http://theappleblog.com/2009/04/08/iphone-dev-sessions-how-to-make-an-orientation-aware-clock/

Aby móc korzystać z bardziej wydajny sposób przełączania widoków, ten poradnik powinien pomóc:

http://icodeblog.com/2008/08/03/iphone-programming-tutorial-transitioning-between-views/

+0

Aplikacja pokazuje użytkownikowi kilka przycisków, które przechodzą do osobnych widoków. Każdy przycisk otwiera widok, w którym znajduje się UIWebView. Wydaje się, że jest to dość prosta aplikacja, którą łatwo można obrócić, ale trwa to dłużej, niż się spodziewałem. Zasadniczo chcę, aby Safari działało na kilka widoków. Spojrzałem na przykład Clock wcześniej, ale który wykorzystuje kod shouldAutorotateToInterfaceOrientation, który obraca każdy widok, nie tylko te, które chcę. Tworzenie oddzielnych widoków dla dźwięków pionowych i poziomych, które mogą sprawnie działać, ale czy nie spowoduje to zresetowania witryny, na której aktualnie jest użytkownik? –

+0

Powinieneś być w stanie utrzymać stan w pewien sposób, albo ze zmienną przechowującą przeglądaną stronę internetową, albo dynamicznie tworząc UIWebView (zamiast w projektancie wizualnym) i dodając go do swoich widoków w razie potrzeby (po obrocie) . –

+0

Wywiady są odsyłaczami do strony, na której użytkownik może się zalogować i przejrzeć konto bankowe. info. Nawet jeśli przechowuję stronę internetową, na której się znajdują, najprawdopodobniej wyloguje się ponownie lub (ponieważ informacje dostarczane są dynamicznie, nie na oddzielnych stronach internetowych), nie będą wyświetlane w miejscu, w którym były wcześniej. Naprawdę potrzebuję sposobu, aby obrócić widok strony internetowej do krajobrazu dokładnie tak, jak powinien to zrobićAutorotateToInterfaceOriention ... nie na każdym widoku. Frustrujące rzeczy. –

Powiązane problemy