2

iOS アプリについて知りたいのですが、ボタンとスライダーを内部に備えたスライドアウト パネルを実装する最良の方法は何ですか?

つまり、アプリの画面の右下隅に、次のような小さな「i」アイコンが表示されます。

ここに画像の説明を入力

そのアイコンに触れると、画面の約 1/4 のサイズのパネルが下からスライドし、ボタン、スライダー、またはその他のウィジェットが表示されます。

それを実装する最良の方法は何ですか-Interface Builderを使用するか、純粋にコードと、パネルに使用するオブジェクト(UIViewまたはこのスライドアウト/スライドイン機能を持つ既存のウィジェット?)。

4

2 に答える 2

2

アプリ内の複数の場所でこれを使用すると仮定すると、おそらく再利用可能なコンポーネントとして作成する必要があります。必要に応じて IB を使用してビューを作成できるように、スライド アウト画面を独自のビュー コントローラーにすることをお勧めします。ユーザーが「i」を押すと、スライド アウト ビュー コントローラーが割り当てられ、そのビューがサブビューとして現在のビュー コントローラーに追加され、アニメーション化されます。スライド アウトと現在のビュー コントローラーの間で通信する必要がある場合は、スライド アウトでカスタム デリゲート プロトコルを作成します。これはいくつかの仮定を行っていることを認識していますが、おそらくあなたにとってはきれいな解決策になるでしょう.

于 2012-05-20T18:53:43.493 に答える
1

これをInterface Builderで作成するのは面倒です(とにかく、そのツールは最悪です)。必ずコードで作成する必要があります。コードに集中でき、ビューを表示するためだけに IB で不可解なプロパティを設定する手間がかからない場合は、保守も容易になります...

次のように実装してみてください。

@interface SlideOutMenu: UIView {
    UIImageView *imgView;
    UITapGestureRecognizer *tap;
}

- (id)initWithImage:(UIImage *)img;

@end


@implementation SlideOutMenu

- (id)initWithImage:(UIImage *)img
{
    if ((self = [self initWithFrame:CGRectMake(0, someY, 44, 44)]))
    {
        imgView = [[UIImageView alloc] initWithImage:img];
        [self addSubview:imgView];
        [imgView release];

        tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_tapped)];
        [self addGestureRecognizer:tap];
        [tap release];
    }
    return self;
}

- (void)_tapped
{
    if (self.frame.origin.x > 1.0) // 1.0: some tolerance b/c of floating point numbers
    {
        [UIView animateWithDuration:0.3 animations:^{
            self.frame = CGRectMake(0, self.frame.origin.y, self.frame.size.width, self.frame.size.height);
        }];
    }
    else
    {
        [UIView animateWithDuration:0.3 animations:^{
            self.frame = CGRectMake(120.0, self.frame.origin.y, self.frame.size.width, self.frame.size.height);
        }];
    }
}

@end
于 2012-05-20T18:56:50.823 に答える