1

iphoneアプリで端末の向きを変えずにアプリの向きを変えたい。ビューをポートレイト モードからランドスケープ モードにプログラムで変更したいと考えています。

また、これがアップルストアに受け入れられるかどうかも知りたいですか?

ありがとう

今、私は他の人から次のような解決策を得ました

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

その時点でこの行を追加すると、1 つの警告が表示され、この警告を削除するには、実装ファイルに次のコードを追加するだけです。

@interface UIDevice (MyPrivateNameThatAppleWouldNeverUseGoesHere)


    - (void) setOrientation:(UIInterfaceOrientation)orientation;


    @end

その後、次のメソッドで、必要に応じてこのコードを記述します..

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

    {

        return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);

    }

しかし、これがアップルのアプリストアに受け入れられているかどうか知りたいですか?

ありがとう

4

5 に答える 5

5

プログラムで方向を変更するには、この行を使用します...

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

また、その時点でこの行を追加すると、1 つの警告が表示され、この警告を削除するには、実装ファイルに次のコードを追加するだけです。

@interface UIDevice (MyPrivateNameThatAppleWouldNeverUseGoesHere)
- (void) setOrientation:(UIInterfaceOrientation)orientation;
@end

その後、次のメソッドで、必要に応じてこのコードを記述します..

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    //    return NO;
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

これがあなたを助けることを願っています..

:)

于 2012-09-27T06:29:15.873 に答える
3

クラス変数を追加する

Bool isInLandsCapeOrientation;

ビューでDidLoad

このフラグを

isInLandsCapeOrientation = false;

次の関数を追加します

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
     if (!isInLandsCapeOrientation) {
         return (UIInterfaceOrientationIsPortrait(interfaceOrientation));

     }else {
         return  (UIInterfaceOrientationIsLandscape(interfaceOrientation));
     }
}

向きを縦向きから横向きに変更するには、ボタン アクションで発生させます

 - (IBAction)changeOrientationButtonPressed:(UIButton *)sender
{
    isInLandsCapeOrientation = true;
    UIViewController *viewController = [[UIViewController alloc] init];
    [self presentModalViewController:viewController animated:NO];
    [self dismissModalViewControllerAnimated:NO];
}

これは私にとってはうまくいきます。

于 2012-09-27T06:32:25.153 に答える
1

Orientation ポートレイト モードをランドスケープ モードに変更するには、このコードを使用します

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

このコードを使用して、プログラムで方向を変更します...

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
于 2012-09-27T07:06:28.100 に答える
0

横向きでのみ特定のビューを変更したい場合は、viewDidLoadで次のことを試すことができます

    float   angle = M_PI / 2; 
    CGAffineTransform transform = CGAffineTransformMakeRotation(angle);
   [ [self.view] setTransform:transform];
于 2012-09-27T06:51:38.330 に答える
0

ドキュメントでは、方向プロパティは読み取り専用であると説明されているため、機能する場合、将来的に機能することに依存できるかどうかはわかりません (Apple が賢明なことを行ってこれを変更しない限り、ユーザーが現在自分のデバイスを保持している場合、これは明らかな機能上のニーズです)。

別の方法として、次のコードを viewDidLoad に挿入すると、正常に (そして少し不思議なことに) 向きが強制されます (既に shouldAutorotateToInterfaceOrientation を変更していると仮定します)。

if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]))
{
    UIWindow *window = [[UIApplication sharedApplication] keyWindow];
    UIView *view = [window.subviews objectAtIndex:0];
    [view removeFromSuperview];
    [window addSubview:view];
}

明らかに、これは、ユーザーが現在デバイスを縦向きに保持している場合に実行されます (したがって、おそらくshouldAutorotateToInterfaceOrientation横向きのみに設定されており、ユーザーがデバイスを縦向きモードで保持している場合、このルーチンはデバイスを横向きに切り替えます)。縦向きのみに設定されている場合は、UIDeviceOrientationIsPortraitをと交換するだけです。UIDeviceOrientationIsLandscapeshouldAutorotateToInterfaceOirentation

何らかの理由で、メイン ウィンドウからビューを削除してから再度追加するshouldAutorotateToInterfaceOrientationと、向きを正しく照会して設定する必要があります。これは Apple が承認したアプローチではないため、使用を控えるべきかもしれませんが、私にとってはうまくいきます。あなたのマイレージは異なる場合があります。しかし、これは他のテクニックにも当てはまります。SOの議論をチェック

于 2012-09-27T06:15:15.820 に答える