2013-08-26 101 views
5

我在我的應用程序中實現了一個類似於亞馬遜Kindle應用程序中的編程旋轉鎖:當設備旋轉時,鎖按鈕顯示;按下按鈕並且方向鎖定到按下按鈕時界面所在的方向。解鎖編程旋轉鎖後強制iOS ViewController旋轉到設備方向

解鎖後,我想界面旋轉到當前的設備方向。假設您鎖定縱向旋轉,將設備旋轉至左側,然後解鎖;我想讓界面旋轉到左側。這裏是切換鎖的方法:

- (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]; 
} 

任何方式來做到這一點?

回答

2

關鍵是1)將當前的方向保存爲用戶默認值,就像您正在做的那樣2)您需要做的所有其他操作都是在您想要鎖定的視圖控制器的重寫方法中(對於ios 6+ ,supportedInterfaceOrientations)。使用您保存的用戶默認值,根據其鎖定與否,返回您允許的方向。

然後致電attemptRotationToDeviceOrientation 告訴您的視圖控制器再次調用他們的方法,並重新評估它們應該在給定設備當前旋轉時的旋轉角度。

+0

謝謝,attemptRotationToDeviceOrientation做的伎倆! – dysfunction

0

這是我如何得到它的工作,以防萬一有人來這裏想看代碼。 :)

-(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

這不完全是我問的問題 - 我沒有問如何實現旋轉鎖定,我已經完成了,我正在問旋轉鎖定解鎖時如何旋轉到設備方向。它看起來像atomk也認爲我問如何做的整個事情,但他沒有回答我的實際問題 - UIViewController類方法attemptRotationToDeviceOrientation是我所需要的。 – dysfunction