UIPopoverController
UIViewを後ろにドラッグアンドドロップして実装するにはどうすればよいですかUIView
。
これは、Pagesが挿入メディアポップオーバーで提供する機能であり、図形をからドラッグUIPopoverController
してメインドキュメントにドロップできます。
私は実際に鍋UIGestureRecognizers
とそれらが実装される場所と混同しています。
ありがとう、
Umer
UIPopoverController
UIViewを後ろにドラッグアンドドロップして実装するにはどうすればよいですかUIView
。
これは、Pagesが挿入メディアポップオーバーで提供する機能であり、図形をからドラッグUIPopoverController
してメインドキュメントにドロップできます。
私は実際に鍋UIGestureRecognizers
とそれらが実装される場所と混同しています。
ありがとう、
Umer
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];
}
2つのViewControllerを処理する必要があります。1つはmainControllerと呼ばれるバックグラウンドにあり、もう1つはpopoverControllerと呼ばれるものを使用して表示さUIPopoverViewController
れます。popoverControllerはUIPanGestureRecognizer
、ユーザーがドラッグできるビューにを追加できます。gestureRecognizerのアクションターゲットは、popoverControllerのメソッドである可能性があります。
ユーザーがドラッグ操作を開始すると、gestureRecognizerの状態がである場合、引数としてgestureRecognizerを使用してアクションメソッドが呼び出されますUIGestureRecognizerStateBegan
。ドロップが失敗したときに、ビューの現在のフレームを保存して、元に戻すことができるようにすることができます。UIPopoverViewControllerがそのビューをclipsToBoundsするかどうかわからないため、ビューを別のスーパービュー(たとえばウィンドウ)に移動する必要がある場合があります。
ユーザーがドラッグすると、アクションメソッドがgestureRecognizerの状態で何度も呼び出されますUIGestureRecognizerStateChanged
。translationInView:
上のメソッドを使用しUIPanGestureRecognizer
て、ユーザーがドラッグした量を判別し、それに応じてドラッグされたビューの中央/フレーム/変換を更新します。
ユーザーが指を離すと、gestureRecoginzersの状態がに設定された状態でアクションメソッドが最後に呼び出されUIGestureRecognizerStateEnded
ます。次に、ドラッグが成功したかどうかを確認します。たとえば、popoverControllerは、ビューの現在の位置の下にドロップターゲットがあるかどうかを委任を介してmainControllerに問い合わせることができます。そうしないと、mainControllerがアクションを実行できます。そうでない場合、popoverControllerは、ドラッグされたビューを元の場所にアニメーション化し、そのビューへのサブビュー。
これがどういうわけか理解可能で役立つことを願っています。