2013-08-26 1 views
5

Ich implementiere eine programmatische Sperrsperre in meiner App ähnlich der in Amazon Kindle App: Wenn das Gerät gedreht wird, zeigt eine Sperrtaste; Drücken Sie die Taste und die Ausrichtung ist in der Ausrichtung fixiert, in der sich die Schnittstelle befand, als die Taste gedrückt wurde.iOSControl ViewController nach dem Entsperren der programmatischen Sperrung in die Geräteausrichtung drehen

Nach dem Entsperren möchte ich die Schnittstelle auf die aktuelle Geräteausrichtung drehen lassen. Nehmen wir an, Sie sperren die Drehung im Hochformat, drehen das Gerät in die linke Landschaft und entsperren es. Ich möchte, dass sich die Schnittstelle dann nach links im Querformat dreht. Hier ist die Methode, die die Sperre umschaltet:

- (IBAction)toggleRotationLock:(UIButton *)sender { 
BOOL rotationLocked = [_defaults boolForKey:@"RotationLocked"]; 
if (rotationLocked) { //unlock rotation 
    [_defaults setBool:NO forKey:@"RotationLocked"]; 
    /* force rotation to current device orientation here? 
    * ... 
    */ 
} else { //lock rotation to current orientation 
    [_defaults setBool:YES forKey:@"RotationLocked"]; 
    [_defaults setInteger:self.interfaceOrientation forKey:@"RotationOrientation"]; 
} 
    [_defaults synchronize]; 
    [self setupRotationLockButton]; 
} 

Jeder Weg, dies zu tun?

Antwort

2

Der Schlüssel ist 1) Speichern der aktuellen Ausrichtung auf Benutzerstandards genau wie youre tun 2) alles, was Sie tun müssen, ist in Ihren überschriebenen Methoden der View-Controller, die Sie absperrbar sein wollen (für ios 6+ , supportedInterfaceOrientations). Verwenden Sie die von Ihnen gespeicherten Benutzervorgaben, um basierend auf den von Ihnen erlaubten Ausrichtungen zurückzukehren, wenn sie gesperrt sind oder nicht.

Dann rufen Sie attemptRotationToDeviceOrientation Um Ihre Ansicht Controller zu nennen, ihre Methoden erneut aufzurufen und neu zu bewerten, welche Rotation sie in der aktuellen Rotation der Geräte sein sollten.

+0

Danke, troubleRotationToDeviceOrientation macht den Trick! – dysfunction

0

Dies ist, wie ich es zur Arbeit, nur für den Fall, wenn jemand, der hier kommt, will den Code zu sehen. :)

-(IBAction)lockOrientation:(UIButton*)sender 
{ 
if (orientationLocked) { //Unlock it, "orientationLocked" is a boolean defined in .h 
    orientationLocked = NO; 
    [sender setTitle:@"Unlocked" forState:UIControlStateNormal]; 
} 
else 
{ // Lock it. 

    //Save the orientation value to NSDefaults, can just be int if you prefer. 
    // "defaults" is a NSUserDefaults also defined in .h 

    [defaults setInteger:[[UIApplication sharedApplication] statusBarOrientation] forKey:@"orientation"]; 
    orientationLocked = YES; 
    [sender setTitle:@"Locked" forState:UIControlStateNormal]; 
} 
} 

- (NSUInteger)supportedInterfaceOrientations{ 
if (orientationLocked) { 

    return = [defaults integerForKey:@"orientation"]; 
} 
return UIInterfaceOrientationMaskAllButUpsideDown; 
} 
+0

Das ist nicht genau die Frage, die ich gestellt habe - ich habe nicht gefragt, wie man die Rotationssperre implementiert, was ich bereits getan habe. Ich habe gefragt, wie man sich in die Geräteausrichtung dreht, wenn die Rotationssperre entriegelt wurde. Es sieht so aus, als ob Atomk auch dachte, ich hätte gefragt, wie man das Ganze machen soll, aber er hat meine eigentliche Frage beantwortet - die UIViewController-Klassenmethode triplyRotationToDeviceOrientation war alles, was ich brauchte. – dysfunction

Verwandte Themen