0

私は を持っていUICollectionViewます。アイテムをタッチ アンド ドラッグしてビューの外に出したり、削除したりできるようにしたいと考えています。(OS X での Dock の動作とほぼ同じです。何かをドラッグして離すと、削除されます)。

私はいくつかの調査を行いましたが、私が見つけたほとんどすべては、ドラッグアンドドロップして並べ替えを行う CollectionViews を探しています。並べ替える必要はありません (ソース配列から指定されたインデックスのアイテムを削除してからリロードするだけで十分です)。アイテムがビューの外に移動されて解放されたときに検出する必要があるだけです。

だから私は私の質問はこれらだと思います:

1)組み込みのCollectionView、何らかのitemWasDraggedOutsideViewFromIndex:メソッドなどでそれは可能ですか?

2) そうでない場合、それはサブクラスで実行できるものですか (具体的には CollectionView の初心者でも可能ですか)?

3) これを行うために推奨できるコード サンプルまたはチュートリアルはありますか?

4

3 に答える 3

3
  1. あなたが提案しているような組み込みの方法はありません。やりたいことはできますが、ドラッグ/ドロップ操作を処理するために、ジェスチャー認識エンジンと適切なコードで処理する必要があります。

  2. これを行うためにサブクラスを使用してみましたが、最終的にビューコントローラーに配置することに戻りました。ただし、私の場合は、コレクション ビューと画面上の他の 2 つのビューの内外に物をドラッグしていました。

  3. あなたが本を持っているかどうかはわかりませんが、私が見つけた中で最も役に立ったのは、Erica Sadun の Core iOS6 Develper's Cookbook で、コレクション ビュー内でのドラッグ アンド ドロップに関する優れたコードが含まれています。CV の外へのドラッグに具体的に対処しているとは思いませんが、私にとっての解決策は、ジェスチャ認識エンジンを共通のスーパービューに配置し、サブビューの座標ではなく常にその座標を使用することでした。

私が遭遇した1つの問題は、タップとドラッグでセルを選択できるようにしたかったことでした.コレクションビューでシングルタップジェスチャを失敗させる方法はありません(逆にAppleのドキュメントにもかかわらず)。その結果、長押しジェスチャを使用して操作全体を実行する必要があり、長押し用の translationInView がない (locationInView がある) ため、追加の作業が必要になりました。

iOS - ジェスチャ レコグナイザ translationInView

それを難し​​くしたり簡単にしたりするもう 1 つのことは、ドロップ ターゲットの数です。多くの異なるタイプのビュー (ストレート UIView、コレクションビュー、およびスクロールビュー) が多数ありました。「ドロップ ターゲット」のリストを維持し、ドラッグされたオブジェクトが移動したときにターゲットとの交差をテストする必要があることがわかりました。どういうわけか、交差しているビューがドロップが発生する可能性がある場所であるかどうかを判断できなければなりません。

ビューから何かをドラッグして削除する特定の状況 (ごみ箱ビューにドラッグするなど) に対処している場合、これは複雑ではありません。変換を行うと、フレームが無意味になることを覚えておく必要がありますが、中心はまだ良好です。そのため、通常フレームを使用するすべてのものにセンターを使用することになります。

これは、私がオンラインで見つけた最も役に立ったものです。アプリに実装するには複雑すぎると思ったので、このクラスを使用することにはなりませんでした。

http://www.ancientprogramming.com/2012/04/05/drag-and-drop-between-multiple-uiviews-in-ios/

これが助けになったことを願っています。

于 2013-08-09T06:45:43.707 に答える
3

これは、まさにそれを行うヘルパー クラスです。TestApp での使用方法の例があります。

アップデート

約 1 年後、これは完全なドラッグ アンド ドロップ フレームワークになりました。これが役立つことを願っています: https://github.com/ice3-software/between-kit

于 2013-12-07T16:53:03.160 に答える