Frage

Meine iPhone-Anwendung basiert auf Navigation und enthält viele Nur-Porträt-Ansichten und eine nur Landschaftsansicht zum Anzeigen von Bildern. Daher möchte ich diese nur Landschaftsansicht dazu zwingen, automatisch nach Lanscape zu drehen, selbst wenn das Gerät im Porträtmodus positioniert ist.

Hier ist also, was ich in dem Controller dieser Ansicht getan habe:

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight); 
}

- (void)viewWillAppear:(BOOL)animated
{
 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
 [self.navigationController.navigationBar setBarStyle:UIBarStyleBlackTranslucent];

 AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

 _originalTransform = [[appDelegate navigationController].view transform];
 _originalBounds = [[appDelegate navigationController].view bounds];
 _originalCenter = [[appDelegate navigationController].view center];

 CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(90));
 landscapeTransform = CGAffineTransformTranslate (landscapeTransform, +80.0, +100.0);

 [[appDelegate navigationController].view setTransform:landscapeTransform];

 [appDelegate navigationController].view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
 [appDelegate navigationController].view.bounds  = CGRectMake(0.0, 0.0, 480.0, 320.0);
 [appDelegate navigationController].view.center  = CGPointMake (240.0, 160.0);

 [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight;
 }
}

- (void)viewWillDisappear:(BOOL)animated
{ 
 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
 [self.navigationController.navigationBar setBarStyle:UIBarStyleDefault];

 AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
 [[appDelegate navigationController].view setTransform:_originalTransform];
 [[appDelegate navigationController].view setBounds:_originalBounds];
 [[appDelegate navigationController].view setCenter:_originalCenter];

 [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationPortrait; 
}

Jetzt habe ich diese Ansicht immer im Lanscape -Modus gezeigt. Aber es gibt ein Problem. Diese Ansicht ist fälschlicherweise wie in gezeigt positioniert Dieser Screenshot.

Ich versuchte, den Rahmen nach der Rotation manuell zu setzen, aber es half nicht. Außerdem habe ich keine vollständige Anleitung gefunden, wie man eine Ansicht so festlegt, dass sie nur Landschaftsbetrieb ist. Bitte helfen Sie mir bei diesem Problem.

War es hilfreich?

Lösung

Schauen Sie sich diesen Kerl an Post. Grundsätzlich müssen Sie sich um die Mitte des Fensters verwandeln. Sieht so aus, als müssten Sie möglicherweise auch die Statusleiste drehen.

Eine andere Methode wäre die Verwendung von Uidevice SetDeviceOrientation, aber das ist eine private API und damit keine großartige Lösung.

Andere Tipps

Versuchen Sie, diese Methode zu verwenden, nachdem Sie die Transformation angewendet haben:

[self.view sizeToFit];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top