5

UIPopoverControllerUIViewを後ろにドラッグアンドドロップして実装するにはどうすればよいですかUIView

これは、Pagesが挿入メディアポップオーバーで提供する機能であり、図形をからドラッグUIPopoverControllerしてメインドキュメントにドロップできます。

私は実際に鍋UIGestureRecognizersとそれらが実装される場所と混同しています。

ありがとう、

Umer

4

2 に答える 2

7

UIPopoverControllerのドキュメントによると、ポップオーバーが表示されると、特別な「ウィンドウ」に表示されます。このため、ポップオーバービューコントローラーのコンテンツビューコントローラーにサブビューを追加するだけでは、ポップオーバービューコントローラーのビューの外にビューをドラッグすることはできません。

ここでの最も簡単な解決策は、独自のウィンドウを作成し、ドラッグが発生したときにドラッグ可能なビューをウィンドウに追加することです。ドラッグアンドドロップの間ウィンドウを表示し、完了したらウィンドウを離します。

上記のように、ジェスチャレコグナイザー(GR)はドラッグ/ドロップ機能に最適です。GRの状態が「開始」に変更されると、GRは「終了」または「キャンセル」状態になるまですべてのタッチを制御します。これにより、ビューコントローラ間およびウィンドウ間でビューをドラッグするのに理想的です:)

例:

@interface MySplitViewController : UISplitViewController {

    UIView *dragView;
    UIWindow *dragWindow;
}

実装: :ウィンドウで「makeKeyAndVisible」を呼び出す必要はありません。「Hidden」プロパティを設定する必要があります

makeKeyAndVisibleメソッドに関してAppleから://便利。ほとんどのアプリはこれを呼び出してメインウィンドウを表示し、キーにします。それ以外の場合は、ビューの非表示プロパティを使用します

-(void)dragBegan{

    self.dragWindow = [[UIWindow alloc] initWithFrame:self.view.window.frame];
    [self.dragWindow addSubview:self.dragView];
    [self.dragWindow setHidden:NO];
}

ここでは、GestureRecognizerの「終了」または「キャンセル」状態を処理します。 :ドラッグアンドドロップが完了したらウィンドウを削除することが重要です。そうしないと、下のビューでのユーザーのインタラクティブ性が失われます。

-(void)dragEnded{

    [self.dragView removeFromSuperview];

    [self.dragWindow setHidden:YES];
    [self.dragWindow release];

    [self.view addSubview:self.dragView];
}
于 2011-02-16T00:17:39.293 に答える
6

2つのViewControllerを処理する必要があります。1つはmainControllerと呼ばれるバックグラウンドにあり、もう1つはpopoverControllerと呼ばれるものを使用して表示さUIPopoverViewControllerれます。popoverControllerはUIPanGestureRecognizer、ユーザーがドラッグできるビューにを追加できます。gestureRecognizerのアクションターゲットは、popoverControllerのメソッドである可能性があります。

ユーザーがドラッグ操作を開始すると、gestureRecognizerの状態がである場合、引数としてgestureRecognizerを使用してアクションメソッドが呼び出されますUIGestureRecognizerStateBegan。ドロップが失敗したときに、ビューの現在のフレームを保存して、元に戻すことができるようにすることができます。UIPopoverViewControllerがそのビューをclipsToBoundsするかどうかわからないため、ビューを別のスーパービュー(たとえばウィンドウ)に移動する必要がある場合があります。

ユーザーがドラッグすると、アクションメソッドがgestureRecognizerの状態で何度も呼び出されますUIGestureRecognizerStateChangedtranslationInView:上のメソッドを使用しUIPanGestureRecognizerて、ユーザーがドラッグした量を判別し、それに応じてドラッグされたビューの中央/フレーム/変換を更新します。

ユーザーが指を離すと、gestureRecoginzersの状態がに設定された状態でアクションメソッドが最後に呼び出されUIGestureRecognizerStateEndedます。次に、ドラッグが成功したかどうかを確認します。たとえば、popoverControllerは、ビューの現在の位置の下にドロップターゲットがあるかどうかを委任を介してmainControllerに問い合わせることができます。そうしないと、mainControllerがアクションを実行できます。そうでない場合、popoverControllerは、ドラッグされたビューを元の場所にアニメーション化し、そのビューへのサブビュー。

これがどういうわけか理解可能で役立つことを願っています。

于 2010-07-02T18:44:17.910 に答える