1

ドラッグ可能なウィンドウ (カート) を表示するアプリケーションを作成したいと考えています。カートは画面の下部からドラッグする必要があり、開いているすべてのビューをカバーする必要があります。ドラッグは指に従う必要があります。

セグエを使用してこれを実装することは可能ですか? 私の考えは、次のようなタッチイベントでセグエを実行することです:

[self performSegueWithIdentifier:@"Show Cart" sender:self];

セグエの実装では、カートを開き、オフスクリーンに配置してから、ユーザーが指を離すまで、ユーザーの指の動きを反映するように配置します。次に、アニメーションを元に戻すか、全画面表示にします。

セグエはこれを目的としたものではありませんが、どうすれば実装できますか?

編集:なるほど、もっと具体的にする必要があります:)ドキュメントをよく理解していれば、1つのビューを提示する方法が3つあります。

  1. それを navigationController にプッシュする: カートはナビゲーション チェーンの「上」に存在するため、これは望ましくありません。カートをそこにプッシュすると、ユーザーが混乱します。

  2. モーダル表示: ビューをドラッグすることはできません。これは、背後にあるオブジェクトが表示されていないためです (単に黒くなっているだけです)。

  3. アプリのルート navigationController のような他のビューにビューを追加する: これを試しましたが、カートのボタンをクリックすると、アプリがクラッシュしました。コントローラーの初期化または保存が不十分だったためだと思います。

では、ビューをモーダルに表示できるとしましょう。しかし、どのようにすれば解決できますか? このビューは、どのオブジェクトに対して理想的に配置されますか?

4

1 に答える 1

1

アップルのドキュメントから:

"カスタム セグエの作成

Interface Builder は、あるビュー コントローラーから別のビュー コントローラーに移行するためのすべての標準的な方法のセグエを提供します...」

したがって、指の動きでビュー(ビューコントローラーではない)を移動したい場合、セグエはあなたのためではありません..

指の動きでビューを動かすには、次のようにする必要があります。

ビューにパン ジェスチャ レコグナイザーを追加します (これを theView と呼びます)。

    UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(viewPanned:)];
    [theView addGestureRecognizer:panGestureRecognizer];

次に、viewPanned: メソッドを実装します。

- (void)viewPanned:(UIPanGestureRecognizer *)recognizer{
    if (recognizer.state == UIGestureRecognizerStateChanged)
        theView.center = [recognizer locationInView:self.view];
 }

このコードは、theView が直接 viewControllers.view に追加されていることを想定していることに注意してください (ここで、self は viewController を指します)。

于 2013-03-07T14:07:45.060 に答える