1

いくつかの共有コードを使用して、さまざまな「モード」のさまざまなビューを持つアプリを作成したいと思います (常に同じにしたい要素がいくつかあり、異なるビュー間で背景が変化します)。時間に基づいて、これらのビュー間のシフトを管理します。ビューをレイアウトする最良の方法は何ですか?

タブビューにしてみましたが、タブバーがなかなか隠れないのでちょっと不自然です。カスタム コンテナーを作成することもできますが (私の当初の考え)、可能であれば "標準" の iOS ビュー内にとどまるのが良いようです。

カスタムビューを実行することは健全に思えますか / 私が見逃したより良い方法はありますか?

4

2 に答える 2

1

モードがスタックベースの場合は、UINavigationController の使用を検討することもできます。ナビゲーション バーは簡単に非表示にすることができます ( hidesNavigationBarYES に設定)。モードに対応するコントローラーをプッシュまたはポップするときはanimated、スライド イン/スライド アウトのアニメーションが自分に合わない場合を除き、NO に設定する必要があります。

于 2013-01-03T21:02:41.123 に答える
1

-layoutSubviews親ビューの2 つのバージョンがあります。何かのようなもの:

-(void)layoutSubviews
{
    if ( self.mode == 0 )
    {
        [ self layoutMode0 ] ;
    }
    else if ( self.mode == 1 )
    {
        [ self layoutMode1 ] ;
    }
}

レイアウト コードでは、特定のビューを表示/非表示にしたり、背景画像を設定したりすることもできます。コードでモードを切り替えるには、-setNeedsLayout次のように呼び出します。

-(void)setMode:(enum Modes)newMode
{
    _mode = newMode ;
    [ self setNeedsLayout ] ;
}

モード スイッチをアニメーション化する場合は、次のようにします。

-(void)setMode:(enum Mode)newMode animated:(BOOL)animated
{
    _mode = newMode ;
    if ( animated )
    {
        [ UIView animateWithDuration:0.25 animations:^{
            [ self layoutSubviews ] ;
        } ]
    }
    else
    {
        [ self setNeedsLayout ] ;
    }
}

通常のセッターは次の-setMode:ようになります。

-(void)setMode:(enum Mode)newMode
{
    [ self setMode:newMode animated:NO ] ;
}
于 2013-01-03T20:57:54.070 に答える