5

Amazon の Kindle アプリに見られるのと同様のプログラムによる回転ロックをアプリに実装しています。デバイスが回転すると、ロック ボタンが表示されます。ボタンを押すと、向きは、ボタンが押されたときのインターフェイスの向きにロックされます。

ロックを解除した後、インターフェイスを現在のデバイスの向きに回転させたいと思います。縦向きで回転をロックし、デバイスを横向き左に回転させてからロックを解除するとします。インターフェイスを横向き左に回転させたいと思います。ロックを切り替える方法は次のとおりです。

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

これを行う方法はありますか?

4

2 に答える 2

2

重要なのは、1) 現在の向きをユーザーの既定値に保存することです。2) 残りの作業は、ロック可能にしたいビュー コントローラーのオーバーライドされたメソッドにあります (ios 6 以降の場合supportedInterfaceOrientations)。保存されたユーザーの既定値を使用して、ロックされているかどうかに基づいて、許可している方向を返します。

次に、attemptRotationToDeviceOrientation To を呼び出して、View Controller にメソッドを再度呼び出し、デバイスの現在の回転を考慮して、どの回転にするかを再評価するように指示します。

于 2013-08-26T02:19:45.130 に答える
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;
}
于 2013-08-26T05:28:31.830 に答える