在手势期间切换对象(拖放)

时间:2012-10-09 22:20:24

标签: ios cocoa-touch drag-and-drop uigesturerecognizer

我正在使用拖放可重排事件创建日历。

视图层次结构如下所示:
ViewController - ScrollView - CalendarWeekView - EventView

scrollView启用了分页,我一次显示一周。为了在几周内启用连续滚动,我有三个WeekCalendarView对象,我在滚动时回收。各个EventViews是CalendarWeekView的子视图。

我希望能够将EventViews从一周拖放到另一周。

我在EventViews上使用UILongPressGestureRecognizer设置在可见周内拖放工作正常。我在WeekView中添加了“热边”以触发滚动,这样我就可以将当前一周的拖放工作拖到工作的任何一周。

但是,如果我从我的第一周开始滚动超过一周,那么视图回收就会发生,并且创建并“拥有”我正在拖动的EventViews的WeekView会被回收(属性重置)。我正在拖动的事件对象会被重置并重复使用,从而消除拖动行为(或者最好在拖动过程中拖动事件!)。

我想我需要将拖动视图与WeekViews分离,在我的事件被拖动时为其创建一个新对象。

如何将长按手势事件从EventView传递给这个新对象?

1 个答案:

答案 0 :(得分:0)

  

如何将长按手势事件从EventView传递给这个新对象?

正如您的建议:D您可以使用addTarget:action:removeTarget:action:来调整手势识别器调用对象的方法。如果愿意,您甚至可以同时拥有多个目标。

在你的情况下,你可能想要这样的东西:

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

编辑:由于你正在拖动一个特定的EventView,而不是创建一个新的并且处理混乱的GR,尝试将拖动的EventView移动到另一个超级视图(可能是滚动视图,尽管我甚至使用了UIWindow这种事情。)