0

私のアプリでは、単一の ViewController の横向きと縦向きをサポートしています。Autoresize を使用して、横向きと縦向きの両方をサポートできます。しかし、ポートレートとは異なるカスタムランドスケープを作成する必要があります。私はiOSが初めてです。グーグルとSOでたくさん検索しましたが、解決策が見つかりませんでした。

Xcode 4.5 とストーリーボードを使用してビューを作成しています。

カスタムの横向きおよび縦向きビューをサポートするにはどうすればよいですか?

どんな助けでも大歓迎です。

4

2 に答える 2

2

.m ファイルでこれを試してください。

- (void)updateLayoutForNewOrientation:(UIInterfaceOrientation)orientation
{
    if (self.interfaceOrientation == UIInterfaceOrientationPortrait || self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
    {
        // Portrait

        [object setFrame:CGRectMake(...)];

        // Do the same for the rest of your objects
    }

    else
    {
        // Landscape

        [object setFrame:CGRectMake(...)];

        // Do the same for the rest of your objects
    }
}

この関数では、ポートレートとランドスケープの両方について、ビュー内の各オブジェクトの位置を定義しました。

次に、その関数を呼び出して、viewWillAppear最初に機能させます。ビューは、開始時に使用する方向を決定します。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [self updateLayoutForNewOrientation:self.interfaceOrientation];
}

また、回転するときは:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration 
{    
     [self updateLayoutForNewOrientation:self.interfaceOrientation];
}

これは、方向に関してよりカスタマイズされた外観が必要な場合に使用するアプローチです。それがうまくいくことを願っています。

編集:

1 つの UIViewController で縦向きと横向きの 2 つの UIView を使用する場合、コードの最初の部分を次のように変更します。

- (void)updateLayoutForNewOrientation:(UIInterfaceOrientation)orientation
{
    if (self.interfaceOrientation == UIInterfaceOrientationPortrait || self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
    {
        // Portrait

        portraitView.hidden = NO;
        landscapeView.hidden = YES;
    }

    else
    {
        // Landscape

        portraitView.hidden = YES;
        landscapeView.hidden = NO;
    }
}

この編集されたサンプルとオリジナルの間には賛否両論があります。オリジナルでは、すべてのオブジェクトに対してコードを作成する必要がありました。この編集済みサンプルでは、​​必要なのはこのコードだけですが、基本的にオブジェクトを 2 回 (1 つは縦表示用、もう 1 つは横表示用) 割り当てる必要があります。

于 2012-10-12T15:49:01.323 に答える
1

あなたはまだSeanのアプローチを使用できますが、2つの異なるビューがあるため、おそらく2つの異なるXibファイルがあるため、CGRectセクションの代わりに[[NSBundle mainBundle] loadNibNamed:"nibname for orientation" owner:self options:nil]; [self viewDidLoad];. まだ使用していないため、これがストーリーボードでどのように機能するかは正確にはわかりませんが、方向に異なるレイアウトが必要なアプリケーションでこれを行ったので、2 つの Xib ファイルを作成し、両方を ViewController に接続しました。ローテーション時に、適切な Xib ファイルがロードされます。

于 2012-10-12T16:06:50.500 に答える