Programmierbare Schnittstelle, die die Orientierung ändern funktioniert nicht für iOS

So, ich habe ein Projekt, wo ich brauche, um Kraft, Orientierung ändern, wenn ein Benutzer eine Taste drückt. Ich habe eine Beispiel-app auf github das Problem veranschaulichen.

@interface DefaultViewController () {
    UIInterfaceOrientation _preferredOrientation;
}

Einige rotation Umgang mit bits

- (BOOL)shouldAutorotate {
    return YES;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return _preferredOrientation;
}

Und ein Knebel

- (IBAction)toggleButtonPressed:(id)sender {
    _preferredOrientation = UIInterfaceOrientationIsPortrait(_preferredOrientation)
        ? UIInterfaceOrientationLandscapeRight
        : UIInterfaceOrientationPortrait;

    [self forceOrientationChange];
}


- (void)forceOrientationChange
{
    UIViewController *vc = [[UIViewController alloc] init];
    [self presentViewController:vc animated:NO completion:nil];

    [UIView animateWithDuration:.3 animations:^{
        [vc dismissViewControllerAnimated:NO completion:nil];
    } completion:nil];
}

Also, das scheint gut zu funktionieren, wenn Sie drücken Sie einfach die Schaltfläche Umschalten, es ändert sich die Ausrichtung wie erwartet. Aber wenn ich beginne, die tatsächliche Ausrichtung des Geräts, gibt es ein Problem.

Schritte zum reproduzieren des Problems:

  1. Öffnen Sie die app im hochformat
  2. Drücken Sie die Taste, um zu erzwingen die änderung der Ausrichtung landscape (Halten Sie das Gerät im hochformat)
  3. Drücken Sie die Taste erneut, um die Kraft der Drehung zurück auf hochformat (Noch halten Sie das Gerät im hochformat)
  4. Drehen Sie die tatsächlichen Gerät, um Landschaft, ohne drücken der Taste

Das Ergebnis ist, dass die Ansicht nicht drehen, um die Landschaft, aber der status Balken wird.

Programmierbare Schnittstelle, die die Orientierung ändern funktioniert nicht für iOS

Jede Hilfe wäre sehr geschätzt werden!

InformationsquelleAutor vradenburg | 2014-01-13
Schreibe einen Kommentar