3

ドラッグアンドドロップで再配置可能なイベントを含むカレンダーを作成しています。

ビュー階層は次のようになります
。ViewController-ScrollView-CalendarWeekView-EventView

scrollViewでページングが有効になっています。一度に1週間表示します。数週間にわたる継続的なスクロールを有効にするために、スクロール時にリサイクルする3つのWeekCalendarViewオブジェクトがあります。個々のEventViewは、CalendarWeekViewのサブビューです。

EventViewをある週から別の週にドラッグアンドドロップできるようにしたいと思います。

EventViewsのUILongPressGestureRecognizerセットアップで、表示されている1週間以内にドラッグアンドドロップで正常に動作しています。WeekViewに「ホットエッジ」を追加してスクロールをトリガーしました。これにより、現在の週からその両側の週にドラッグアンドドロップできます。

ただし、最初の週から1週間以上スクロールすると、ビューのリサイクルが発生し、ドラッグしているEventViewを作成して「所有」しているWeekViewがリサイクルされます(プロパティがリセットされます)。ドラッグしているイベントオブジェクトはリセットされて再利用されるため、ドラッグ動作が強制終了されます(または、ドラッグ中にドラッグされるイベントが変更されます)。

ドラッグしているビューをWeekViewsから切り離し、ドラッグしている間にイベント用の新しいオブジェクトを作成する必要があると思います。

長押しジェスチャイベントをEventViewからこの新しいオブジェクトに渡すにはどうすればよいですか?

4

1 に答える 1

0

長押しジェスチャイベントをEventViewからこの新しいオブジェクトに渡すにはどうすればよいですか?

あなたが提案するのと同じように:Dジェスチャレコグナイザによって呼び出されるオブジェクトのメソッドを使用addTarget:action:および調整できます。removeTarget:action:必要に応じて、複数のターゲットを同時に持つこともできます。

あなたの場合、あなたはおそらく次のようなものが欲しいでしょう:

[g removeTarget:self action:NULL]; // Remove everything that this object added
[g addTarget:newObject action:newSEL];

編集:新しいイベントビューを作成してGRのシャッフルを処理するのではなく、特定のEventViewをドラッグしているので、ドラッグしているEventViewを別のスーパービュー(おそらくスクロールビューですが、この種のUIWindowを使用したこともあります)に移動してみてくださいもの)。

于 2012-10-09T22:28:36.177 に答える